Programing

배열의 모든 문자열 트리밍

lottogame 2020. 11. 29. 09:30
반응형

배열의 모든 문자열 트리밍


다음과 같은 문자열이 있습니다.

string email = "a@a.com, b@b.com, c@c.com";

나는 그것을 문자열 배열로 나누고 싶다.

이렇게하면 :

string[] emails = email.Split(',');

각 이메일 주소 앞에 공백이 있습니다 (첫 번째 주소 뒤에).

emails[0] = "a@a.com"
emails[1] = " b@b.com"
emails[2] = " c@c.com"

이것을 얻는 가장 좋은 방법은 무엇입니까 (파싱하는 더 좋은 방법 또는 배열의 모든 문자열을 자르는 방법)?

emails[0] = "a@a.com"
emails[1] = "b@b.com"
emails[2] = "c@c.com"

모든 공백을 바꿀 수도 있으므로 foreach 루프를 피할 수 있습니다.

string email = "a@a.com, b@b.com, c@c.com";    
string[] emails = email.Replace(" ", "").Split(',');

emails.Split(',').Select(email => email.Trim()).ToArray()

다음 중 하나가 작동합니다. 첫 번째는 결합 문자열을 더 정확하게 표현하기 때문에 추천합니다.

string[] emails = email.Split(new string[] { ", " }, StringSplitOptions.None);
string[] emails = email.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);

Trim ()을 사용할 수 있습니다.

string email = "a@a.com, b@b.com, c@c.com";
string[] emails = email.Split(',');
emails = (from e in emails
          select e.Trim()).ToArray();

Regex.Split트리밍을 피하기 위해 사용

var emails = Regex.Split(email, @",\s*");

다음과 같은 한 줄 솔루션을 사용할 수 있습니다.

string[] emails = text.Split(',', StringSplitOptions.RemoveEmptyEntries);
Array.ForEach<string>(emails, x => emails[Array.IndexOf<string>(emails, x)] = x.Trim());

또는 다음 형식의 정규식을 사용하여 분할 할 수 있습니다.

\s*,\s*

string[] emails = Regex.Split(email, @"\s*,\s*");

주변 공간을 직접 소비합니다.

정규식은 일반적으로 성능 저하가 있지만 제공 한 예제는 짧은 배열에 대해 코드에서 한 번 수행 할 계획임을 나타냅니다.


Bryan Watts의 대답은 우아하고 간단합니다. 그는 Split ()에 의해 생성 된 문자열 배열을 암시 적으로 참조합니다.

또한 파일을 읽고 배열을 구축하는 동안 데이터를 마사지하려는 경우 확장성에 유의하십시오.

string sFileA = @"C:\Documents and Settings\FileA.txt";
string sFileB = @"C:\Documents and Settings\FileB.txt";

// Trim extraneous spaces from the first file's data
string[] fileAData = (from line in File.ReadAllLines( sFileA )
                      select line.Trim()).ToArray();

// Strip a second unneeded column from the second file's data
string[] fileBData = (from line in File.ReadAllLines( sFileB )
                      select line.Substring( 0, 21 ).Trim()).ToArray();

물론 원하는 경우 Linq => 표기법을 사용할 수 있습니다.

string[] fileBData = File.ReadAllLines( sFileB ).Select( line =>
                             line.Substring( 0, 21 ).Trim()).ToArray();

내 답변이 댓글로 게시되어야했지만 아직 댓글을 달 수있는 평판 포인트가 충분하지 않습니다. 하지만이 토론은 ReadAllLines ()를 사용하는 동안 데이터를 마사지하는 방법을 알아내는 데 매우 중요하다는 것을 알았습니다.


사용 String.TrimA의 foreach루프는, 또는 당신은 3.5 LINQ 문을 .NET을 사용하는 경우.


배열을 반환하지 않고 항목을 조작해야하는 경우 :

string[] emails = text.Split(',');
Array.ForEach(emails, e => e.Trim());

참고URL : https://stackoverflow.com/questions/1355704/trim-all-strings-in-an-array

반응형