ฉันต้องการลบอักขระพิเศษเช่น:
- + ^ . : ,
จากสตริงโดยใช้ Java
ฉันต้องการลบอักขระพิเศษเช่น:
- + ^ . : ,
จากสตริงโดยใช้ Java
replaceAll
นั้นก็ออกไป หากคุณมีข้อกำหนดที่ลึกลับมากขึ้นโปรดแก้ไขคำถาม :)
replaceAll
เพื่อพวกเขาหรือทำการแยกวิเคราะห์ สตริงเพิ่มตัวอักษรที่ไม่ใช่อักขระที่คุณต้องการนำออกไปยังสตริงอื่นและในที่สุดก็ทำ + = กับสตริงที่คุณจะกลับมา
deleteChars.apply( fromString, "-+^.:," );
- ค้นหา deleteChars ที่นี่
คำตอบ:
ขึ้นอยู่กับสิ่งที่คุณกำหนดเป็นอักขระพิเศษ แต่ลองreplaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
โปรดทราบว่าไฟล์ ^
อักขระจะต้องไม่เป็นอักขระตัวแรกในรายการเนื่องจากคุณจะต้องหลีกหนีหรืออาจหมายถึง "อักขระใดก็ได้ยกเว้นอักขระเหล่านี้"
หมายเหตุอีกประการหนึ่ง: -
อักขระจะต้องเป็นตัวแรกหรือตัวสุดท้ายในรายการมิฉะนั้นคุณจะต้องหลีกเลี่ยงไม่เช่นนั้นจะกำหนดช่วง (เช่น:-,
จะหมายถึง "อักขระทั้งหมดในช่วง:
ถึง,
)
ดังนั้นเพื่อให้สอดคล้องและไม่ได้ขึ้นอยู่กับการวางตำแหน่งตัวอักษรที่คุณอาจต้องการที่จะหลบหนีทุกตัวอักษรที่มีความหมายพิเศษในการแสดงออกปกติ (รายการต่อไปนี้จะไม่สมบูรณ์ดังนั้นจึงควรตระหนักถึงตัวละครอื่น ๆ ชอบ(
, {
, $
ฯลฯ ) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
หากคุณต้องการที่จะได้รับการกำจัดของเครื่องหมายวรรคตอนและสัญลักษณ์ทั้งหมดลอง regex นี้: \p{P}\p{S}
(เก็บไว้ในใจว่าในสตริง Java คุณจะต้องหลบหนีกลับมาทับ: "\\p{P}\\p{S}"
)
วิธีที่สามอาจเป็นแบบนี้หากคุณสามารถกำหนดสิ่งที่ควรทิ้งไว้ในสตริงของคุณ:
String result = yourString.replaceAll("[^\\w\\s]","");
ซึ่งหมายความว่า: แทนที่ทุกอย่างที่ไม่ใช่อักขระคำ (az ไม่ว่าในกรณีใด ๆ , 0-9 หรือ _) หรือช่องว่าง
แก้ไข: โปรดทราบว่ามีรูปแบบอื่น ๆ ที่อาจเป็นประโยชน์ แต่ผมไม่สามารถอธิบายให้พวกเขาทั้งหมดเพื่อให้ดูได้ที่ส่วนการอ้างอิงของregular-expressions.info
ทางเลือกที่ จำกัด น้อยกว่าสำหรับแนวทาง "กำหนดอักขระที่อนุญาต" ตามที่ Ray แนะนำ:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
นิพจน์ทั่วไปจะจับคู่ทุกอย่างที่ไม่ใช่ตัวอักษรในภาษาใด ๆ และไม่ใช่ตัวคั่น (เว้นวรรค, linebreak ฯลฯ ) โปรดทราบว่าคุณไม่สามารถใช้ไฟล์[\P{L}\P{Z}]
(ตัวพิมพ์ใหญ่ P หมายถึงไม่มีคุณสมบัตินั้น) เนื่องจากจะหมายถึง "ทุกสิ่งที่ไม่ใช่ตัวอักษรหรือไม่ใช่ช่องว่าง" ซึ่งเกือบจะตรงกับทุกอย่างเนื่องจากตัวอักษรไม่ใช่ช่องว่างและในทางกลับกัน
ข้อมูลเพิ่มเติมเกี่ยวกับ Unicode
อักขระ Unicode บางตัวดูเหมือนจะก่อให้เกิดปัญหาเนื่องจากวิธีต่างๆที่เป็นไปได้ในการเข้ารหัส (เป็นจุดรหัสเดียวหรือจุดรหัสรวมกัน) โปรดดูที่regular-expressions.infoสำหรับข้อมูลเพิ่มเติม
[\P{L}]
-
อักขระต้องเป็นอักขระตัวแรกหรือตัวสุดท้ายในรายการมิฉะนั้นจะต้องมีการใช้ Escape
[^\\p{L}\\p{Z}]
ดูเหมือนจะกำจัด Umlauts ภาษาเยอรมัน (ä, ö, ü) ด้วย (อย่างน้อยก็ทำเพื่อฉัน: /) ดังนั้น "นิพจน์ทั่วไปจะจับคู่ทุกอย่างที่ไม่ใช่ตัวอักษรในภาษาใด ๆ " ดูเหมือนจะไม่ถูกต้อง 100%
String result = yourString.replaceAll("[^\w\s]","");
ทำให้ผิดพลาดInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
สิ่งนี้จะแทนที่อักขระทั้งหมดยกเว้นตัวอักษรและตัวเลข
replaceAll("[^A-Za-z0-9]","");
ตามที่อธิบายไว้ที่นี่ http://developer.android.com/reference/java/util/regex/Pattern.html
รูปแบบถูกรวบรวมนิพจน์ทั่วไป ในหลายกรณีวิธีการอำนวยความสะดวกเช่น
String.matches
,String.replaceAll
และString.split
จะดีกว่า แต่ถ้าคุณต้องการที่จะทำมากของการทำงานที่มีการแสดงออกปกติเดียวกันก็อาจจะมีประสิทธิภาพมากขึ้นในการรวบรวมครั้งเดียวและนำมาใช้ใหม่ คลาส Pattern และ Matcher ที่เป็นคู่หูยังมีฟังก์ชันการทำงานที่มากกว่าจำนวนเล็กน้อยที่แสดงโดย String
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
ผลลัพธ์
String is = one
Number is = 9196390097
ลองใช้replaceAll()
วิธีการของString
คลาส
BTW นี่คือวิธีการประเภทผลตอบแทนและพารามิเตอร์
public String replaceAll(String regex,
String replacement)
ตัวอย่าง:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
ควรลบตัวอักษร {'^', '+', '-'} ทั้งหมดที่คุณต้องการลบออก!
เพื่อลบอักขระพิเศษ
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
ผลลัพธ์จะเป็น: abdd.
นี้ทำงานได้อย่างสมบูรณ์
ใช้String.replaceAll()
วิธีการใน Java
แทนที่ทั้งหมดควรจะดีพอสำหรับปัญหาของคุณ
คุณสามารถลบถ่านเดี่ยวได้ดังนี้:
String str="+919595354336";
String result = str.replaceAll("\\\\+","");
System.out.println(result);
เอาท์พุท:
919595354336
หากคุณแค่ต้องการทำการแทนที่ตัวอักษรใน java ให้ใช้Pattern.quote(string)
เพื่อหลีกเลี่ยงสตริงใด ๆ ไปเป็นลิเทอรัล
myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
String
ชั้นเรียนหรือไม่ โดยเฉพาะอย่างยิ่งให้มองหาคำว่า 'regex'; มีวิธีการสองสามวิธีและความคิดเล็กน้อยควรบอกวิธีดำเนินการ ... :)