Comparação de seqüências, .NET e espaço rígido

votos
13

Eu tenho um aplicativo escrito em C # que faz um monte de comparação de string. As cordas são puxadas a partir de uma variedade de fontes, incluindo (de entrada de utilizador) e são então comparados. No entanto, eu estou correndo em problemas quando se compara o espaço '32' para o espaço não-quebra '160'. Para o usuário que eles têm a mesma aparência e por isso eles esperam uma partida. Mas quando o aplicativo faz a comparar, não há jogo.

Qual é a melhor maneira de ir sobre isso? Eu vou ter que ir a todas as partes do código que a String de comparação e manualmente normalizar não quebrar espaços a espaços? O .NET oferecer qualquer coisa para ajudar com isso? (Eu tentei todas as opções de comparar mas nenhum parece ajudar.)

Tem sido sugerido que eu normalizar as cordas em cima do recibo e, em seguida, deixar a String de comparação método simplesmente comparar as cordas normalizados. Eu não tenho certeza que seria simples e direta de fazer isso, porque o que é uma cadeia normalizado em primeiro lugar. O que eu normalizá-lo também? Claro, agora eu posso converter espaços não quebrar a espaços quebrando. Mas o que mais pode aparecer? Pode não ser potencialmente muito muitas dessas regras? Pode até mesmo ser conflitantes. (Em um caso que eu quero usar uma regra e em outro eu não.)

Publicado 31/03/2009 em 15:53
fonte usuário
Em outras línguas...                            


5 respostas

votos
31

Eu passei por muita dor para encontrar essa resposta simples. O código a seguir usa uma expressão regular para substituir espaços não quebra com espaços normais.

string cellText = "String with non breaking spaces.";
cellText = Regex.Replace(cellText, @"\u00A0", " ");

Espero que isso ajude, Dan

Respondeu 22/06/2009 em 20:27
fonte usuário

votos
9

Se fosse comigo, eu iria 'normalizar' as cordas como eu 'puxou-os em'; provavelmente com uma String.Replace (). Então você não vai precisar alterar suas comparações em qualquer outro lugar.

Editar : Mark, que é uma pergunta difícil. Seus realmente até você, ou você clientes, como o que é uma string 'normalizado'. Eu estive em uma situação semelhante, onde o cliente exigiu que as cordas gosto:

Eu tenho 4 maçãs.
Tenho quatro maçãs.

eram realmente iguais. Você pode precisar normalizadores separadas para diferentes situações. De qualquer maneira, eu ainda faria a normalização sobre a recuperação das cordas originais.

Respondeu 31/03/2009 em 15:57
fonte usuário

votos
1

Eu sugiro criar seu próprio comparador de cadeia que se estende um dos mais originais - fazer a "normalização" lá (substituir espaço sem quebras com espaço regular). Além da instância Equalsmétodo, há uma estática String.Equalsque leva um comparador.

Respondeu 22/08/2016 em 15:42
fonte usuário

votos
0

Ele precisa ser

text.Replace('\u00A0',' ')

onde \u00A0é espaço rígido

Isto irá substituir o espaço rígido com espaço normal.

Respondeu 14/03/2018 em 06:27
fonte usuário

votos
-1

O mesmo sem regex, principalmente para mim quando eu precisar dele mais tarde:

text.Replace('\u00A0', ' ')

Respondeu 12/01/2018 em 14:34
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more