Yanıtlar:
String.trim()
Dizenin başındaki ve sonundaki boşluklardan (boşluklar, yeni satırlar vb.) Kurtulmak için yöntemi kullanın .
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Eski String::trim
yöntem vardır tuhaf bir tanım içinde boşluk .
Bahsedildiği gibi burada , Java 11 yeni ekler strip…
için yöntemler String
sınıfında. Bunlar, boşlukların daha Unicode açısından daha anlayışlı bir tanımını kullanır. JavaDoc sınıfındaki bu tanımın kurallarına bakın Character::isWhitespace
.
Örnek kod.
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Yoksa şerit olabilir sadece lider veya sadece sondaki boşluk.
Yeni satırlarınızı hangi kod noktalarının oluşturduğunu tam olarak belirtmiyorsunuz . Yeni satırınızın aşağıdakiler tarafından hedeflenen bu kod noktaları listesine dahil edildiğini tahmin ediyorum strip
:
Bu Java kodu, sorunun başlığında sorulanı tam olarak yapar, yani "bir dizge java'nın başından ve sonundan yeni satırları kaldır":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Yeni satırları yalnızca satırın sonundan kaldırın:
String.replaceAll("[\n\r]$", "")
Yeni satırları yalnızca satırın başından kaldırın:
String.replaceAll("^[\n\r]", "")
Dizeniz potansiyel olarak ise null
, StringUtils.trim()
- null güvenli sürümünü kullanmayı düşünün 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])$", "") + "]");
Yalnızca baştaki ve sondaki satır sonlarını (boşlukları, sekmeleri değil) kaldırmak istiyorsanız bir String'in (arada değil) istiyorsanız, bu yaklaşımı kullanabilirsiniz:
Bir dizenin başından ( ) ve sonundan ( ) \\r
satır \\n
başlarını ( ^
) ve satır beslemelerini ( ) kaldırmak için normal bir ifade kullanın $
:
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
Tam Örnek:
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+"<");
}
}
Çıktıları:
before: >
Hello
World
<
after: >Hello
World<
Buna bir cevap da ekleyeceğim çünkü aynı soruyu sorarken verilen cevap yeterli olmadı. Biraz düşündüğümde, bunun düzenli bir ifade ile çok kolay yapılabileceğini fark ettim.
Yeni satırları baştan kaldırmak için:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
ve bir dizenin sonu:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
Bunun bir ipi kesmenin en verimli performans yolu olmadığından eminim. Ancak, böyle bir operasyonu sıralı hale getirmenin en temiz ve en basit yolu gibi görünüyor.
Basit bir normal ifade olduğundan, her iki uçtan herhangi bir varyasyonu ve karakter kombinasyonunu kırpmak için aynı yöntemin uygulanabileceğini unutmayın.
split()
sadece sınırdır. Sınırsız sayıda eşleştirmek istiyorsanız bunu kapalı bırakın.
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");