ฉันมีสตริงที่มีข้อความตามด้วยบรรทัดว่าง วิธีใดที่ดีที่สุดในการเก็บส่วนที่มีข้อความ แต่ลบช่องว่างขึ้นบรรทัดใหม่จากท้าย
ฉันมีสตริงที่มีข้อความตามด้วยบรรทัดว่าง วิธีใดที่ดีที่สุดในการเก็บส่วนที่มีข้อความ แต่ลบช่องว่างขึ้นบรรทัดใหม่จากท้าย
คำตอบ:
ใช้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 มากขึ้น Character::isWhitespace
ดูกฎของคำนิยามนี้ในชั้นเรียนสำหรับ JavaDoc
ตัวอย่างรหัส
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])$", "") + "]");
หากคุณต้องการลบตัวแบ่งบรรทัด (ไม่ใช่ช่องว่างแท็บ) ที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง (ไม่ใช่ระหว่างกัน) คุณสามารถใช้วิธีนี้:
ใช้นิพจน์ทั่วไปเพื่อลบการส่งคืนค่าขนส่ง ( \\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<
ฉันจะเพิ่มคำตอบสำหรับสิ่งนี้เช่นกันเพราะในขณะที่ฉันมีคำถามเดียวกันคำตอบที่ให้มาก็ไม่เพียงพอ เมื่อพิจารณาถึงความคิดฉันก็ตระหนักว่าสิ่งนี้สามารถทำได้อย่างง่ายดายด้วยการแสดงออกปกติ
ในการลบขึ้นบรรทัดใหม่จากจุดเริ่มต้น:
// 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()
เป็นเพียงขีด จำกัด ปล่อยทิ้งไว้หากคุณต้องการจับคู่ไม่ จำกัด จำนวนครั้ง
ลองทำตามนี้
function replaceNewLine(str) {
return str.replace(/[\n\r]/g, "");
}
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");