Şunun gibi özel karakterleri kaldırmak istiyorum:
- + ^ . : ,
Java kullanan bir dizeden.
Şunun gibi özel karakterleri kaldırmak istiyorum:
- + ^ . : ,
Java kullanan bir dizeden.
replaceAllonlardan uzakta kalıpınızı oluşturun . Daha ezoterik gereksinimleriniz varsa soruyu düzenleyin. :)
replaceAllonlar için bir yapın ya da bir ayrıştırma yapın dize, çıkarmak istediğiniz karakter olmayan karakterleri başka bir dizeye ekleyin ve sonunda geri döneceğiniz String'e sadece + = yapın.
deleteChars.apply( fromString, "-+^.:," );- deleteChars'ı burada bulabilirsiniz
Yanıtlar:
Bu, neyi özel karakterler olarak tanımladığınıza bağlıdır, ancak şunu deneyin replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
Not olduğunu ^o zaman ya bunu kaçmak zorunda kalacak ya da "herhangi fakat bu karakterleri" anlamına geleceğini çünkü karakter, listedeki ilk olmamalıdır.
Başka not: -karakter aksi takdirde ondan kaçmak olurdu ya da bir dizi tanımlarsınız (örneğin listedeki ilk veya son biri olması gerekir :-,aralığındaki "tüm karakterleri anlamına gelecektir :için ,).
Karakter konumlandırma bağlıdır tutarlılık tutmak için değil yani, sen normal ifadelerde özel anlam tüm bu karakterlerden kurtulmak isteyebilirsiniz (Aşağıdaki liste, böylece diğer karakterlerin farkında tamamlanmadı olacak gibi (, {, $ vs.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Tüm noktalama işaretlerinden ve sembollerden kurtulmak istiyorsanız, şu normal ifadeyi deneyin: \p{P}\p{S}(Java dizgilerinde ters eğik çizgilerden kaçınmanız gerektiğini unutmayın :) "\\p{P}\\p{S}".
Üçüncü bir yol, dizenizde ne bırakılması gerektiğini tam olarak tanımlayabilirseniz, bunun gibi bir şey olabilir:
String result = yourString.replaceAll("[^\\w\\s]","");
Bu şu anlama gelir: kelime karakteri (her durumda az, 0-9 veya _) veya boşluk olmayan her şeyi değiştirin.
Düzenleme: Lütfen yardımcı olabilecek birkaç başka model olduğunu unutmayın. Bununla birlikte, hepsini açıklayamam, bu yüzden normal- expressions.info'nun referans bölümüne bir göz atın .
Ray'in önerdiği gibi, "izin verilen karakterleri tanımla" yaklaşımına daha az kısıtlayıcı bir alternatif:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Normal ifade, herhangi bir dilde harf olmayan ve ayırıcı olmayan her şeyle eşleşir (boşluk, satır sonu vb.). Kullanamayacağınıza dikkat edin [\P{L}\P{Z}](büyük harf P, bu özelliğe sahip olmamak anlamına gelir), çünkü bu, "harf olmayan veya beyaz boşluk olmayan her şey" anlamına gelir, bu neredeyse her şeyle eşleşir, çünkü harfler beyaz boşluk değildir ve bunun tersi de geçerlidir.
Unicode hakkında ek bilgiler
Bazı unicode karakterleri, onları kodlamanın farklı olası yolları nedeniyle (tek bir kod noktası veya kod noktalarının bir kombinasyonu olarak) sorunlara neden oluyor gibi görünmektedir. Daha fazla bilgi için lütfen normal-ifadeler.info'ya bakın .
[\P{L}]
-karakterin listedeki ilk veya sonuncu karakter olması veya kaçılması gerektiğini unutmayın .
[^\\p{L}\\p{Z}]Görünüşe göre Almanca Umlaut'ları (ä, ö, ü) de ortadan kaldırıyor (en azından benim için öyle yapıyor: /), bu nedenle "Normal ifade herhangi bir dilde olmayan her şeyle eşleşiyor"% 100 doğru görünmüyor
String result = yourString.replaceAll("[^\w\s]","");hata yapıyorInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Bu, alfanümerik hariç tüm karakterlerin yerini alacak
replaceAll("[^A-Za-z0-9]","");
Burada açıklandığı gibi http://developer.android.com/reference/java/util/regex/Pattern.html
Desenler düzenli ifadeler olarak derlenir. Birçok durumda, kolaylık gibi yöntemler
String.matches,String.replaceAllveString.splittercih olacaktır, ancak aynı düzenli ifade ile çok çalışma yapmak gerekir, eğer bir kez derlemek ve yeniden kullanmak daha verimli olabilir. Pattern sınıfı ve arkadaşı Matcher, String tarafından sunulan küçük miktardan daha fazla işlevsellik sunar.
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;
}
}
Sonuç
String is = one
Number is = 9196390097
Sınıfın replaceAll()yöntemini deneyin String.
BTW burada yöntem, dönüş türü ve parametrelerdir.
public String replaceAll(String regex,
String replacement)
Misal:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
Kaldırmak istediğiniz tüm {'^', '+', '-'} karakterleri kaldırmalıdır!
Özel karakteri kaldırmak için
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
Çıktı şu şekilde olacaktır: abdd.
Bu mükemmel çalışıyor.
String.replaceAll()Java'daki yöntemi kullanın .
replaceAll , sorununuz için yeterince iyi olmalıdır.
StringSınıfın belgelerini okumayı denediniz mi? Özellikle, 'regex' kelimesini arayın; birkaç yöntem var ve biraz düşünce size nasıl devam edeceğinizi anlatmalı ... :)