อะไรรูปแบบ regex ฉันจะต้องส่งผ่านไปยัง java.lang.String.split()
แยกสตริงเป็น array ของสตริงโดยใช้ตัวอักษรทั้งหมดช่องว่าง (เป็น' '
, '\t'
, '\n'
ฯลฯ ) เป็นตัวคั่น?
อะไรรูปแบบ regex ฉันจะต้องส่งผ่านไปยัง java.lang.String.split()
แยกสตริงเป็น array ของสตริงโดยใช้ตัวอักษรทั้งหมดช่องว่าง (เป็น' '
, '\t'
, '\n'
ฯลฯ ) เป็นตัวคั่น?
คำตอบ:
บางสิ่งบางอย่างในสายของ
myString.split("\\s+");
กลุ่มนี้มีช่องว่างสีขาวทั้งหมดเป็นตัวคั่น
ดังนั้นถ้าฉันมีสตริง:
"Hello[space][tab]World"
นี้ควรผลผลิตสตริง"Hello"
และ"World"
และงดช่องว่างระหว่างและ[space]
[tab]
ในฐานะที่เป็น VonC ชี้ให้เห็นเครื่องหมายควรจะหนีเพราะ Java แรกจะพยายามที่จะหลบหนีสตริงอักขระพิเศษและส่งที่สามารถแยกวิเคราะห์ สิ่งที่คุณต้องการคือที่แท้จริงซึ่งหมายความว่าคุณจะต้องผ่าน"\s"
"\\s"
มันอาจทำให้สับสนเล็กน้อย
เทียบเท่ากับ\\s
[ \\t\\n\\x0B\\f\\r]
trim()
ก่อน: trim().split("\\s++")
- มิฉะนั้นเช่นแยก `abc 'จะปล่อยสองสตริงว่างก่อน
"\\\\s"
?
ในภาษาถิ่น regex ส่วนใหญ่มีชุดบทสรุปตัวละครที่สะดวกสบายที่คุณสามารถใช้สำหรับสิ่งนี้ - นี่คือสิ่งที่ดีที่ต้องจำ:
\w
- จับคู่อักขระคำใด ๆ
\W
- ตรงกับตัวละครที่ไม่ใช่คำพูดใด ๆ
\s
- จับคู่อักขระเว้นวรรคใด ๆ
\S
- จับคู่อะไรก็ได้ยกเว้นอักขระเว้นวรรค
\d
- ตรงกับตัวเลขใด ๆ
\D
- จับคู่อะไรก็ได้ยกเว้นตัวเลข
การค้นหา "Regex Cheatsheets" ควรตอบแทนคุณด้วยบทสรุปที่เป็นประโยชน์มากมาย
ในการทำให้Javascriptทำงานฉันต้องทำสิ่งต่อไปนี้:
myString.split(/\s+/g)
"\\ s +" ควรทำเคล็ดลับ
นอกจากนี้คุณอาจมี UniCode ที่ไม่ทำลายพื้นที่ xA0 ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Apache Commons Lang มีวิธีการแยกสตริงด้วยอักขระช่องว่างเป็นตัวคั่น:
StringUtils.split("abc def")
สิ่งนี้อาจใช้งานง่ายกว่ารูปแบบ regex
เนื่องจากเป็นนิพจน์ทั่วไปและฉันถือว่าคุณไม่ต้องการอักขระที่ไม่ใช่ตัวอักษรและตัวเลขเช่นเครื่องหมายจุลภาคจุด ฯลฯ ที่สามารถล้อมรอบด้วยช่องว่าง (เช่น "หนึ่งสอง" ควรให้ [หนึ่ง] [สอง]) มันควรจะเป็น:
myString.split(/[\s\W]+/)
คุณสามารถแยกสตริงตามตัวแบ่งบรรทัดโดยใช้คำสั่งต่อไปนี้:
String textStr[] = yourString.split("\\r?\\n");
คุณสามารถแยกสตริงด้วย Whitespace โดยใช้คำสั่งต่อไปนี้:
String textStr[] = yourString.split("\\s+");
String str = "Hello World";
String res[] = str.split("\\s+");
ศึกษารหัสนี้ .. ขอให้โชคดี
import java.util.*;
class Demo{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
System.out.print("Input String : ");
String s1 = input.nextLine();
String[] tokens = s1.split("[\\s\\xA0]+");
System.out.println(tokens.length);
for(String s : tokens){
System.out.println(s);
}
}
}