尝试编写一个Java方法,该方法将接收字符串,在字符串中循环遍历,并在找到元音的位置(A,E,I,O,U,Y)将其替换为元音加“ OB”。
我已经写了下面的内容,但是它不能按我期望的那样工作,并且似乎无法将字符串中的当前字符与列表中的元音匹配。 (该程序可以编译并运行,因此在开始时不导入必要的位就不是问题。输入字符串将始终为大写且仅包含字母。)我正在努力弄清哪里出了问题。 / p>
有人可以帮忙吗?
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;
}
答案 0 :(得分:4)
不使用索引。
在处理更改字符串时,使用索引进行管理可能很困难。
对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
答案 1 :(得分:1)
您比较Arrays.asList(myList).contains(tempText.charAt(i))
中的两种不同类型,Arrays.asList(myList)
是List<String>
,而tempText.charAt
是char
。因此,包含检查将永远不会导致结果为真。
一个可能的解决方法,将myList更改为Character[]
Character[] myList = new Character[] {'A','E','I','O','U','Y'};
实际插入还有另一个问题,有关解决方案,请参见Pankaj Singhal的答案。
答案 2 :(得分:1)
charAt
返回一个char
,但是myList
存储String
个元素。 String
数组不能包含contain
的{{1}}值。您的if语句永远不会运行。
您可以将char
值转换为字符串:
char
您的代码只有一个问题。
当代码在元音之后插入Arrays.asList(myList).contains(Character.toString(tempText.charAt(i)))
时,会有一个副作用:创建了一个新的元音O。然后,您的代码尝试在新的OB
之后插入OB
。这是不希望的,对吧?
要使其不执行此操作,可以从字符串的末尾循环到开头:
O
如果这不是使用for (int i = text.length() - 1; i >= 0 ; i--) {
或for循环练习的家庭作业问题,那么以下是使用正则表达式的一个线性解决方案:
StringBuilder