У мене є рядок, який містить текст, за яким слідує порожній рядок. Який найкращий спосіб зберегти частину з текстом, але видалити з кінця новий рядок пробілу?
У мене є рядок, який містить текст, за яким слідує порожній рядок. Який найкращий спосіб зберегти частину з текстом, але видалити з кінця новий рядок пробілу?
Відповіді:
Використовуйте String.trim()
метод, щоб позбутися пробілів (пробіли, нові рядки тощо) з початку і в кінці рядка.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Старий String::trim
метод має дивне визначення з прогалин .
Як обговорювалося тут , Java 11 додає нові strip…
методи до String
класу. Вони використовують більш чітке визначення Unicode пробілу. Дивіться правила цього визначення в класі JavaDoc для Character::isWhitespace
.
Приклад коду.
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Або ви можете зняти лише провідну чи просто пробільну пробіли.
Ви не згадуєте, які саме кодові пункти складають ваші нові рядки. Я думаю, ваш новий рядок, ймовірно, включений до цього списку кодів, на які орієнтовано strip
:
Цей код Java виконує саме те, що задається в заголовку питання, тобто "видалити нові рядки з початку та кінця string-java":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Видаліть нові рядки лише з кінця рядка:
String.replaceAll("[\n\r]$", "")
Видаліть нові рядки лише з початку рядка:
String.replaceAll("^[\n\r]", "")
Якщо ваш рядок потенційно null
, подумайте про використання StringUtils.trim()
- безпечної для нуля версії String.trim()
.
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
Я також додам відповідь на це, оскільки, хоча у мене було те саме питання, наданої відповіді було недостатньо. Враховуючи деяку думку, я зрозумів, що це можна зробити дуже легко звичайним виразом.
Щоб видалити нові рядки з початку:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
і кінець рядка:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
Я впевнений, що це не найефективніший спосіб обрізки струни. Але, здається, це найчистіший і найпростіший спосіб ввести таку операцію.
Зауважте, що той самий метод можна зробити для обрізки будь-яких варіацій та комбінацій символів з будь-якого кінця, оскільки це простий регулярний вираз.
split()
це лише межа. Залиште це, якщо ви хочете відповідати необмежену кількість разів.
Якщо ви хочете видалити лише розриви рядків (не пробіли, вкладки) на початку та в кінці рядка (не між ними), тоді ви можете скористатися таким підходом:
Використовуйте регулярні вирази, щоб видалити повернення каретки ( \\r
) та канали рядків ( \\n
) від початку ( ^
) та закінчення ( $
) рядка:
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
Повний приклад:
public class RemoveLineBreaks {
public static void main(String[] args) {
var s = "\nHello\nWorld\n";
System.out.println("before: >"+s+"<");
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
System.out.println("after: >"+s+"<");
}
}
Він виводить:
before: >
Hello
World
<
after: >Hello
World<
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");