C #에는 Java와 같은 String Tokenizer가 있습니까?
간단한 문자열 입력 구문 분석을 수행 중이며 문자열 토크 나이저가 필요합니다. 저는 C #을 처음 접했지만 Java를 프로그래밍했으며 C #에 문자열 토크 나이저가 있어야하는 것이 당연한 것 같습니다. 그렇습니까? 어디 있어요? 어떻게 사용하나요?
String.Split 메서드를 사용할 수 있습니다 .
class ExampleClass
{
public ExampleClass()
{
string exampleString = "there is a cat";
// Split string on spaces. This will separate all the words in a string
string[] words = exampleString.Split(' ');
foreach (string word in words)
{
Console.WriteLine(word);
// there
// is
// a
// cat
}
}
}
자세한 내용은 C # (Performance, Regex) 에서 문자열 분할에 대한 Sam Allen의 문서를 참조하세요.
저는 C #의 Split 메서드의 힘을 강조하고 특히 Java 배경에서 온 사람으로부터 더 자세한 비교를 제공하고 싶습니다.
Java의 StringTokenizer는 단일 구분 기호 만 허용하는 반면, 실제로 여러 구분 기호로 분할하여 정규식을 덜 필요하게 만들 수 있습니다 (정규식이 필요하면 정규식을 사용하십시오!) 예를 들어 다음과 같이하십시오.
str.Split(new char[] { ' ', '.', '?' })
이는 토큰 배열을 반환하는 세 가지 구분 기호로 분할됩니다. 위의 예에서 두 번째 매개 변수가 될 빈 배열을 제거 할 수도 있습니다.
str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)
Java의 String tokenizer가 C #에 부족하다고 생각하는 한 가지는 (적어도 Java 7에는이 기능이 있음) 구분 기호를 토큰으로 유지하는 기능입니다. C #의 Split은 토큰을 버립니다. 이것은 일부 NLP 응용 프로그램에서 중요 할 수 있지만보다 일반적인 용도의 응용 프로그램에서는 문제가되지 않을 수 있습니다.
문자열의 분할 방법이 필요합니다. 사실 Java의 토크 나이저 클래스는 Java의 문자열 분할 방법을 위해 더 이상 사용되지 않습니다.
.NET Framework에서 가장 가까운 것은
string.Split ()
복잡한 분할의 경우 일치 컬렉션을 만드는 정규식을 사용할 수 있습니다.
_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetter).ToArray())));
또는
_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray())));
사용하다 Regex.Split(string,"#|#");
이것을 읽으면, 분할 함수에는 오버로드가 있습니다. 분리 자로 구성된 배열 http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx
Java의 방법과 유사합니다.
Regex.Split(string, pattern);
어디
string
-분할해야하는 텍스트pattern
-문자열 유형 패턴, 텍스트를 분할하는 것
.NET 콘솔 앱에서 명령 줄 인수를 분할하는 것과 같은 작업을 수행하려는 경우 .NET이 손상되었거나 영리 해 지려고하기 때문에 문제가 발생할 것입니다. 나는 공백 문자로 인수를 분할 할 수 있어야했고, 인용 된 모든 리터럴을 보존하여 중간에 분할되지 않도록해야했습니다. 이 작업을 수행하기 위해 작성한 코드입니다.
private static List<String> Tokenise(string value, char seperator)
{
List<string> result = new List<string>();
value = value.Replace(" ", " ").Replace(" ", " ").Trim();
StringBuilder sb = new StringBuilder();
bool insideQuote = false;
foreach(char c in value.ToCharArray())
{
if(c == '"')
{
insideQuote = !insideQuote;
}
if((c == seperator) && !insideQuote)
{
if (sb.ToString().Trim().Length > 0)
{
result.Add(sb.ToString().Trim());
sb.Clear();
}
}
else
{
sb.Append(c);
}
}
if (sb.ToString().Trim().Length > 0)
{
result.Add(sb.ToString().Trim());
}
return result;
}
C # 3.5를 사용하는 경우 필요한 분할을 수행하는 확장 메서드를 System.String에 작성할 수 있습니다. 그런 다음 구문을 사용할 수 있습니다.
string.SplitByMyTokens();
MS의 더 많은 정보와 유용한 예제는 여기 http://msdn.microsoft.com/en-us/library/bb383977.aspx
참고 URL : https://stackoverflow.com/questions/70405/does-c-sharp-have-a-string-tokenizer-like-javas
'IT Share you' 카테고리의 다른 글
SQL Server Express Edition에서 작업을 만드는 방법 (0) | 2020.11.16 |
---|---|
NullPointerException을 던지는 Android FragmentManager BackStackRecord.run (0) | 2020.11.16 |
PHP fileinfo는 정의되지 않은 함수입니다. (0) | 2020.11.16 |
N 문자마다 문자열에 구분 기호를 추가 하시겠습니까? (0) | 2020.11.16 |
Nginx를 통한 EventSource / 서버 전송 이벤트 (0) | 2020.11.16 |