.NET에서 문자열을 줄 바꿈으로 분할해야하며 문자열을 분할하는 유일한 방법은 Split 메서드를 사용하는 것입니다. 그러나 그렇게하면 개행 문자를 (쉽게) 나눌 수 없으므로 최선의 방법은 무엇입니까?
답변
문자열을 분할하려면 문자열 배열을 취하는 오버로드를 사용해야합니다.
string[] lines = theText.Split(
new[] { Environment.NewLine },
StringSplitOptions.None
);
편집 :
텍스트에서 다른 유형의 줄 바꿈을 처리하려면 둘 이상의 문자열을 일치시키는 기능을 사용할 수 있습니다. 이렇게하면 줄 바꿈 유형 중 하나에서 올바르게 분할되고 텍스트에 빈 줄과 간격이 유지됩니다.
string[] lines = theText.Split(
new[] { "\r\n", "\r", "\n" },
StringSplitOptions.None
);
답변
를 사용하는 것은 StringReader
어떻습니까?
using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
string line = reader.ReadLine();
}
답변
다음과 같이 문자열을 아주 쉽게 분리 할 수 있어야합니다.
aString.Split(Environment.NewLine.ToCharArray());
답변
문자열을 사용하지 마십시오. 일반 솔루션의 경우, 함수에서 사용하는 모든 위치 (원래 문자열 및 분할 복사본)를 메모리에서 더 많이 사용하므로 일반적인 솔루션으로 분할하십시오. 100MB 문서를 처리하는 32 비트 일괄 처리 응용 프로그램을 실행하면 8 개의 동시 스레드에서 문제가 발생할 수 있습니다. 내가 전에 거기에 있었던 것은 아닙니다 …
대신 이와 같은 반복자를 사용하십시오.
public static IEnumerable<string> SplitToLines(this string input)
{
if (input == null)
{
yield break;
}
using (System.IO.StringReader reader = new System.IO.StringReader(input))
{
string line;
while( (line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
이를 통해 데이터를보다 효율적으로 메모리 순환 할 수 있습니다.
foreach(var line in document.SplitToLines())
{
// one line at a time...
}
물론 메모리에 모든 것을 원한다면 이것을 할 수 있습니다.
var allTheLines = document.SplitToLines.ToArray();
답변
Guffa의 답변에 따라 확장 클래스에서 다음을 사용하십시오.
public static string[] Lines(this string source) {
return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}
답변
문자열 변수의 경우 s
:
s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)
이것은 환경의 줄 끝 정의를 사용합니다. Windows에서 줄 끝은 CR-LF (캐리지 리턴, 줄 바꿈) 또는 C #의 이스케이프 문자 \r\n
입니다.
로 줄을 다시 조합하면 String.Join
원래 문자열과 같으 므로 신뢰할 수있는 솔루션입니다 .
var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);
하지 말아야 할 것 :
StringSplitOptions.RemoveEmptyEntries
빈 줄에 구문상의 목적이있는 Markdown과 같은 마크 업이 중단되므로을 사용하십시오 .new char[]{Environment.NewLine}
Windows에서는 각 줄마다 빈 문자열 요소가 하나씩 만들어 지므로 separator 에서 split .
답변
정규식도 옵션입니다.
private string[] SplitStringByLineFeed(string inpString)
{
string[] locResult = Regex.Split(inpString, "[\r\n]+");
return locResult;
}