我應該撰寫一個函式來排除句子(字串)的某些字母(字符)。我基本上也這樣做了,但問題是我只設法剪掉了句子中字母的第一次出現。
public static void main (String[] args) {
String text = "This text may be readable without vowels!";
String letters = "aeiou";
Out.println(removeLetters(text, letters));
}
public static String removeLetters(String text, String letters) {
char c = 'f';
String remover = text;
for (int i=0; i<letters.length(); i ) {
c = letters.charAt(i);
remover = removeChar(remover, c);
}
return remover;
}
public static String removeChar(String text, char c) {
int i1 = text.indexOf(c);
String result = text.substring(0, i1) text.substring(i1 1);
return result;
}
我需要如何更改最后一個函式removeChar才能剪掉一個字母的所有外觀?找到所有索引可能并不難,但真正的困難是之后將子字串放在一起,這樣你仍然只剩下一個沒有某些字母的句子。因為如果我理解正確的話,您擁有的索引越多,您需要添加在一起的不同子字串就越多。
目前我明白了。
Ths txt my be readable witht vowels!
目標是到達這里:
Ths txt my b rdbl witht vwls!
uj5u.com熱心網友回復:
這是使用正則運算式的一種方式。它只是用[aeiou]空字串替換字符類中的每個元音。
String text = "This text may be readable without vowels!";
text = text.replaceAll("[aeiou]","");
System.out.println(text);
印刷
Ths txt my b rdbl wtht vwls!
uj5u.com熱心網友回復:
我的建議是在removeChar函式內部使用回圈。
添加一個while回圈,如果text.indexOf(c)回傳 -1則中斷(這意味著該字串不再包含您正在搜索的字母)。
通過這種方式,您將找到要從源字串中洗掉的每個字母的所有出現。
removeChar 函式的示例代碼:
public static String removeChar(String text, char c) {
String result = text;
int i1 = text.indexOf(c);
while (i1 != -1) {
System.out.println("Index of " c " in " result " is: " i1);
String part1 = result.substring(0, i1);
System.out.println(part1);
String part2 = result.substring(i1 1);
System.out.println(part2);
result = part1 part2;
i1 = result.indexOf(c);
}
return result;
}
uj5u.com熱心網友回復:
帶回圈的“經典”變體:
public static String removeLetters(String text, String strLetters) {
Set<Character> letters = new HashSet<>();
for (char i : strLetters.toCharArray()) {
letters.add(i);
}
StringBuilder sb = new StringBuilder();
for (char i : text.toCharArray()) {
if (!letters.contains(i)) sb.append(i);
}
return sb.toString();
}
uj5u.com熱心網友回復:
這里有兩種方法使用streams:
選項1:
您可以stream使用文本chars(),然后.filter()使用字母:
public static String removeLetters(String text, String letters) {
return text.chars().filter(c -> letters.indexOf(c) == -1)
.mapToObj(Character::toString).collect(Collectors.joining());
}
選項2:
您可以stream使用字母chars(),然后用.reduce()洗掉chars的text:
public static String removeLetters(String text, String letters) {
return letters.chars().mapToObj(Character::toString)
.reduce(text, (str, c) -> str.replaceAll(c, ""));
}
然后:
String text = "This text may be readable without vowels!";
String letters = "aeiou";
System.out.println(removeLetters(text, letters));
輸出:
Ths txt my b rdbl wtht vwls!
uj5u.com熱心網友回復:
避免 char
其他答案使用自 Java 2 以來一直遺留的char/Character型別。作為 16 位值,char在物理上無法表示大多數字符。
使用代碼點
相反,學習使用代碼點整數。Unicode 中定義的超過 140,000 個字符中的每一個都被永久分配了一個代碼點編號。
List< Integer > vowelCodePoints = List.of( "aeiou".codePoints().toArray() ) ;
獲取IntStream分配給輸入字串中每個字符的代碼點。
IntStream codePoints = input.codePoints() ;
過濾在您的元音代碼點集合中找不到的字符的代碼點。
int[] filteredCodePoints = codePoints.filter( codePoint -> ! vowelCodePoints.contains( codePoint ) ).toArray() ;
String從該代碼點整數陣列中創建一個。請參閱問題,從代碼點整數串列生成字串物件?.
String result = new String( filteredCodePoints , 0 , filteredCodePoints.length ) ;
警告:此代碼未經測驗,只是草稿。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/368299.html
下一篇:計算二維字串中的所有元音
