[英]Java method not doing what expected. Trying to understand why
嘗試編寫一個將接收字符串的Java方法,循環遍歷它,並在其中找到一個元音(A,E,I,O,U,Y)的地方用元音加“ OB”替換它。
我已經寫了下面的內容,但是它沒有按我期望的那樣工作,並且似乎無法將字符串中的當前字符與列表中的元音匹配。 (該程序可以編譯並運行,因此在開始時不導入必要的位就不是問題。輸入字符串將始終為大寫且僅包含字母。)我正在努力弄清哪里出了問題。
有人可以幫忙嗎?
public static String obifyText(String text) {
String[] myList = new String[] {"A","E","I","O","U","Y"};
StringBuilder tempText = new StringBuilder(text);
String obify = "OB";
for (int i = 0; i < text.length() -1 ; i ++ ) {
if ( Arrays.asList(myList).contains(tempText.charAt(i)) ) {
System.out.println(tempText.charAt(i)+" found.");
tempText = tempText.insert((i+1),obify);
}
}
text = tempText.toString();
return text;
}
不要玩索引。
當您處理更改字符串時,使用索引進行管理可能很困難。
按如下所示循環char
本身:
public static void main(String[] args){
String[] myList = new String[] {"A","E","I","O","U","Y"};
String text = "AEE";
StringBuilder tempText = new StringBuilder("");
String obify = "OB";
for (char c : text.toCharArray()){
tempText = tempText.append(c);
if ( Arrays.asList(myList).contains(c+"") ) {
System.out.println(c+" found.");
tempText = tempText.append(obify);
}
}
text = tempText.toString();
System.out.println(text);
}
輸出:
A found.
E found.
E found.
AOBEOBEOB
您比較Arrays.asList(myList).contains(tempText.charAt(i))
兩種不同類型, Arrays.asList(myList)
是List<String>
而tempText.charAt
是char
。 因此,包含檢查將永遠不會導致結果為true。
一種可能的解決方法,將myList更改為Character[]
Character[] myList = new Character[] {'A','E','I','O','U','Y'};
實際插入還有另一個問題,請參見Pankaj Singhal答案以尋求解決方案。
charAt
返回一個char
,但是myList
存儲String
元素。 String
數組不能contain
char
值。 您的if語句永遠不會運行。
您可以將char
值轉換為字符串:
Arrays.asList(myList).contains(Character.toString(tempText.charAt(i)))
您的代碼只有一個問題。
當代碼在元音之后插入OB
,會有一個副作用:創建了一個新的元音O。 然后,您的代碼嘗試在新的O
之后插入OB
。 這是不希望的,對吧?
要使其不執行此操作,可以從字符串的末尾循環到開頭:
for (int i = text.length() - 1; i >= 0 ; i--) {
如果這不是使用StringBuilder
或for循環練習的家庭作業問題,那么以下是使用正則表達式的一個線性解決方案:
return text.replaceAll("([AEIOUY])", "$1OB");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.