วิธีการแทนที่จุด (.) ในสตริงใน Java


87

ฉันมีสายอักขระที่เรียกว่า persons.name

ฉันต้องการแทนที่ DOT .ด้วย/*/ เช่นเอาต์พุตของฉันจะเป็นpersons/*/name

ฉันลองใช้รหัสนี้:

String a="\\*\\";
str=xpath.replaceAll("\\.", a);

ฉันได้รับ StringIndexOutOfBoundsException

ฉันจะแทนที่จุดได้อย่างไร

คำตอบ:


147

คุณต้องมีแบ็กสแลชสองตัวก่อนจุดหนึ่งเพื่อหนีเครื่องหมายทับเพื่อให้มันทะลุและอีกอันเพื่อหนีจากจุดเพื่อให้มันกลายเป็นตัวอักษร เครื่องหมายทับและเครื่องหมายดอกจันจะถือตามตัวอักษร

str=xpath.replaceAll("\\.", "/*/");          //replaces a literal . with /*/

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)


1
มันไม่ควรxpath.replaceAll("\\\\.", "/*/")?
ha9u63ar

10

ถ้าคุณต้องการที่จะเข้ามาแทนที่สตริงง่ายและคุณไม่จำเป็นต้องมีความสามารถในการแสดงผลปกติคุณก็สามารถใช้ไม่ได้replacereplaceAll

replace แทนที่แต่ละสตริงย่อยที่ตรงกัน แต่ไม่ตีความอาร์กิวเมนต์เป็นนิพจน์ทั่วไป

str = xpath.replace(".", "/*/");

9

ใช้Apache Commons Lang :

String a= "\\*\\";
str = StringUtils.replace(xpath, ".", a);

หรือด้วย JDK แบบสแตนด์อโลน:

String a = "\\*\\"; // or: String a = "/*/";
String replacement = Matcher.quoteReplacement(a);
String searchString = Pattern.quote(".");
String str = xpath.replaceAll(searchString, replacement);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.