הסרת שורות ריקות מ-string ב-C#
-
מצו"ב קוד להסרת שורות ריקות ממחרוזת טקסט ב-C#
אשמח לקבל משובpublic static string RemoveEmptyLines(this string input) { var lines = input.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); var nonEmptyLines = lines.Where(line => !string.IsNullOrWhiteSpace(line)); return string.Join("\n", nonEmptyLines); }
-
קוד יפה מאוד!!!
אם יורשה לי אני לא ליד מחשב עם VS בשביל לבדוק את הקוד אבל בכל אופן יש לי קצת הערות
חשוב להבין מה כתבת בכדי להבין מה קורה בקודvar lines = input.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
פה אתה מחלק את המחרוזת לפי שני תווים גם לפי \r וגם לפי \n ומסיר את האייטמים הריקים
זה אומר שהשורה
var nonEmptyLines = lines.Where(line => !string.IsNullOrWhiteSpace(line));
מיותרת
בשורה
return string.Join("\n", nonEmptyLines);
אתה מחבר את הרשימה חזרה למחרוזת אם \n בין כל אייטם
אני רואה שאתה משתמש בextension
כדי לך גם להפוך את string.Jion ל extension (זה יהיה לך מאוד שימושי בהמשך)
אני חושב שהדרך הטובה יותר לכתוב את הקוד הואpublic static string RemoveEmptyLines(this string input) { return input.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).ToStringJoin(); } public static string ToStringJoin<T>(this IEnumerable<T> input, string separator = "\n") { return string.Join(separator, input); }
-
@pcinfogmach כדאי לתקן את שם הפונקציה שישקף בצורה מדוייקת את התוכן
הייתי קורא לזהremoveWhitespaceOnlyLines
(מסתבר שזה היה גם חוסך את אי ההבנה של @Mordechai-0) -
@pcinfogmach
במקום:return string.Join("\n", nonEmptyLines);
עדיף:
return string.Join(Environment.NewLine, nonEmptyLines);
אני הייתי עושה את זה גם בשורה הראשונה במקום:
new[] { '\r', '\n' }
-
@קומפיונט כתב בהסרת שורות ריקות מ-string ב-C#:
@yossiz נכון, לכן לא הצעתי את זה, אבל אני אישית הייתי עושה ככה.
(בנתיים אף פעם לא נתקלתי בבעיה כזאת, מעניין באמת מה עדיף)יש הרבה פלטפורמות שהמרחק בין השורות נמדד לפי זה
כלומר: \n מרחק קטן (לשימוש בין שורות)
\r\n מרחק גדול יותר (לשימוש בין פסקאות) -
@pcinfogmach עוד אופציה למיטוב ביצועים, זה להשתמש ב -
StringBuilder
עםAppendLine
, ולא עםWhere
ו -string.Join