Java方法未执行预期的操作。试图理解为什么
尝试编写一个java方法,该方法将获取一个字符串,在其中循环找到一个元音(a、E、I、O、U、Y),并将其替换为元音加上“OB” 我已经写了下面的内容,但它没有像我预期的那样工作,而且似乎没有将字符串中的当前字符与列表中的元音匹配。(该程序编译并运行,因此在开始时不导入必要的位不会造成问题。输入字符串将始终为大写且仅包含字母。)我正在努力找出哪里出了问题 有人能帮忙吗Java方法未执行预期的操作。试图理解为什么,java,Java,尝试编写一个java方法,该方法将获取一个字符串,在其中循环找到一个元音(a、E、I、O、U、Y),并将其替换为元音加上“OB” 我已经写了下面的内容,但它没有像我预期的那样工作,而且似乎没有将字符串中的当前字符与列表中的元音匹配。(该程序编译并运行,因此在开始时不导入必要的位不会造成问题。输入字符串将始终为大写且仅包含字母。)我正在努力找出哪里出了问题 有人能帮忙吗 public static String obifyText(String text) { String[] myLi
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;
}
公共静态字符串obifyText(字符串文本){
字符串[]myList=新字符串[]{“A”、“E”、“I”、“O”、“U”、“Y”};
StringBuilder TENTEXT=新的StringBuilder(文本);
字符串obify=“OB”;
对于(int i=0;i
您可以比较数组中的两种不同类型。asList(myList)。contains(testext.charAt(i))
,数组。asList(myList)
是列表
,而testext.charAt
是字符。因此,contains检查永远不会得到true
一个可能的修复方法是将myList更改为字符[]
Character[] myList = new Character[] {'A','E','I','O','U','Y'};
实际插入还有另一个问题,请参见Pankaj Singhal答案以获得解决方案。您可以比较数组中的两种不同类型。asList(myList).contains(attextext.charAt(i))
,数组。asList(myList)
是列表,而attextextext.charAt
是字符。因此,contains检查永远不会得到true
一个可能的修复方法是将myList更改为字符[]
Character[] myList = new Character[] {'A','E','I','O','U','Y'};
实际插入还有另一个问题,请参阅Pankaj Singhal答案以获得解决方案。不要使用索引
在处理更改字符串时,使用索引进行管理可能会很困难
循环char
s本身,如下所示:
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
不要玩索引
在处理更改字符串时,使用索引进行管理可能会很困难
循环char
s本身,如下所示:
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
charAt
返回char
,但myList
存储String
元素。String
s数组决不能包含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循环练习的家庭作业问题,那么这里有一个使用regex的单行程序解决方案:
return text.replaceAll("([AEIOUY])", "$1OB");
charAt
返回char
,但myList
存储String
元素。String
s数组决不能包含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循环练习的家庭作业问题,那么这里有一个使用regex的单行程序解决方案:
return text.replaceAll("([AEIOUY])", "$1OB");
您能给出一些示例输入,以及方法在给定这些输入时返回的值和期望值吗?您能给出一些示例输入,以及方法在给定这些输入时返回的值和期望值吗?这不起作用。问题在于如果两个元音同时出现在索引中。运行您的代码并检查。这不起作用。问题在于如果两个元音同时出现在索引中。运行代码并检查。