2010-01-25 2 views
35

다음 형식 문자열 "## #. ##"을 사용하여 문자열에 숫자 서식을 지정하고 있습니다. 어느 시점에서이 숫자 문자열을 1234567과 같은 것으로 되돌릴 필요가 있습니다. 빈 문자하지만 어떤 이유와 문자열내 소스 코드에서 char 160은 무엇을 의미합니까?

value = value.Replace(" ", ""); 

내가

값이 [1] 궁금 (160)

것으로 나타났습니다 문자열을보고 한 후 1 234 567 남아 있음을 발견 한 것은 값 160은?

+2

이러한 종류의 유니 코드 코드 포인트를 발견하기 위해 Windows에 멋진 애플릿이 내장되어 있습니다. Charmap.exe 사용 –

+0

실행하려고했지만 Windows 2008에서 실행할 수 없습니다 – gyurisc

+0

@HansPassant 2010 년에 애플릿에 대해 말했습니까? – asyncwait

답변

41

대답은 Unicode Code Charts에서 찾을 수 있습니다. 여기에서 Latin-1 supplement chart을 찾을 수 있습니다. 이것은 U + 00A0 (본문 당 167 개가 아니라 제목 당 160 개)이 비 분리 공간임을 보여줍니다.

14

문자 코드 160

2

Char.IsWhiteSpace 사용하여 공백으로 분류 된 모든 문자를 제거하는 빠른 (공정하게 읽을 수있는) 방법 : 당신은 당신의 데이터에서 숫자를해야합니다 알고 있다면 당신은,

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (!char.IsWhiteSpace (c)) 
     sb.Append (c); 
} 
string value= sb.ToString(); 

dbemerlin로 포인트를 밖으로 보다 효율적으로 사용 Char.IsNumber 또는 더 제한적인 Char.IsDigit 것 :

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (char.IsNumber(c)) 
     sb.Append (c); 
} 
string value= sb.ToString(); 

당신이 숫자와 소수점 seperators 필요한 경우

,이 같은 충분해야합니다

StringBuilder sb = new StringBuilder (value.Length); 
foreach (char c in value) 
{ 
    if (char.IsNumber(c)|c == System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) 
     sb.Append (c); 
} 
string value= sb.ToString(); 
+0

소수 구분 기호는 어떨까요? Char.IsDigit() 및 Char.IsNumber()도 건너 뜁니 까? – gyurisc

+0

@ AskAboutGadgets.com, 예 IsNumber 및 IsDigit는 10 진수 분리 자에 대해 false를 반환합니다. 새로운 예제를 추가했습니다 –

+0

"||" 대신에 "|" 가독성을 위해. – Xantix

10

value.Replace(Convert.ToChar(160).ToString(),"")

+0

value.Replace (((char) 160) .ToString(), "") 적은 타이핑을 위해 – cryss

1

나는 char overload version 사용하는 것이 좋습니다 것입니다 : 확장 방법과

value = value.Replace(Convert.ToChar(160), ' ') 
0

솔루션 :

public static class ExtendedMethods 
{ 
    public static string NbspToSpaces(this string text) 
    { 
     return text.Replace(Convert.ToChar(160), ' '); 
    } 
} 

를 그리고이 코드를 사용할 수 있습니다

0

Rubens가 이미 게시 한 정규식 메서드로 모든 빈 문자를 바꾸는 것이 바람직한 방법이 아니겠습니까?

Regex.Replace(input, @"\p{Z}", ""); 

또는 어떤 프레소 알 :

Regex.Replace(input, @"\p{Zs}", ""); 

여기서 차이는 \ P {ZS}를 공백 문자를 대체하는 반면 그 \ P는 {Z}를 공백 또는 보이지 않는 세퍼레이터의 종류를 교체 인 보이지 않지만 공간을 차지합니다. 당신은 여기를 읽을 수 있습니다 (제 유니 코드 카테고리) :

http://www.regular-expressions.info/unicode.html

정규식은 하나의 명령은 또한 정상 공백을 대체하기 위해 필요하고 비 분리 공백뿐만 아니라 같은 몇 가지로 설명 장점을 가지고 사용 위의 답변.

성능이 그다지 좋은 방법이 아니라면 다른 방법을 고려해야하지만 여기서는 그 범위를 벗어납니다.

관련 문제