Я хочу видалити спеціальні символи, такі як:
- + ^ . : ,
із рядка за допомогою Java.
Я хочу видалити спеціальні символи, такі як:
- + ^ . : ,
із рядка за допомогою Java.
replaceAllїх подалі. Якщо у вас є більше езотеричних вимог, відредагуйте питання. :)
replaceAllдля них, або, проаналізуйте рядок, додайте символи, які не є символами, які ви хочете вивести, до іншого рядка, і в кінці просто зробіть + = до рядка, який ви повернете.
deleteChars.apply( fromString, "-+^.:," );- знайдіть deleteChars тут
Відповіді:
Це залежить від того, що ви визначаєте як спеціальні символи, але спробуйте replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
Зверніть увагу, що ^символ не повинен бути першим у списку, оскільки вам тоді доведеться або втекти від нього, або це означатиме "будь-які, крім цих символів".
Ще одне зауваження: -символ повинен бути першим або останнім у списку, інакше вам доведеться його уникнути, або він визначатиме діапазон (наприклад :-,, означатиме "всі символи в діапазоні :до ,).
Отже, для того , щоб зберегти консистенцію і не залежить від розташування символів, ви можете захотіти , щоб уникнути всіх цих персонажів , які мають особливе значення в регулярних виразах (наступний список не є повним, так і бути в курсі інших персонажів , як (, {, і $ т.д.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Якщо ви хочете позбутися всіх знаків пунктуації та символів, спробуйте цей регулярний вираз: \p{P}\p{S}(майте на увазі, що в рядках Java вам доведеться уникати похилих рисок:) "\\p{P}\\p{S}".
Третім способом може бути щось подібне, якщо ви точно можете визначити, що має залишитися у вашому рядку:
String result = yourString.replaceAll("[^\\w\\s]","");
Це означає: замініть усе, що не є символом слова (az у будь-якому випадку 0-9 або _) або пробілом.
Редагувати: будь ласка, зауважте, що існує ще декілька моделей, які можуть виявитися корисними. Однак я не можу пояснити їх усіх, тому погляньте на довідковий розділ regular-expressions.info .
Ось менш обмежувальна альтернатива підходу "визначити дозволені символи", як запропонував Рей:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Регулярний вираз відповідає всьому, що не є літерою будь-якої мови і не є роздільником (пробіли, розбиття рядків тощо). Зверніть увагу, що ви не можете використовувати [\P{L}\P{Z}](регістр P означає відсутність цієї властивості), оскільки це означало б "усе, що не є літерою чи не пробілами", що майже відповідає усьому, оскільки літери не є пробілами, і навпаки.
Додаткова інформація про Unicode
Здається, деякі символи Юнікоду створюють проблеми через різні можливі способи їх кодування (як окрема кодова точка або комбінація кодових точок). Для отримання додаткової інформації зверніться до регулярних висловлювань .
[\P{L}]
-символ повинен бути першим або останнім у списку, або його потрібно екранувати.
[^\\p{L}\\p{Z}]здається, також усуває німецькі умлаути (ä, ö, ü) (принаймні, це робить для мене: /), тому "регулярний вираз відповідає всьому, що не є буквою будь-якої мови", здається, не на 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заняття.
До речі, тут є метод, тип повернення та параметри.
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.
replaceAll має бути достатньо хорошим для вирішення вашої проблеми.
Stringкласу? Зокрема, шукайте слово "регулярний вираз"; Є кілька методів, і трохи роздумів має підказати вам, як діяти ... :)