我正在编写代码,用户将某些单词输入到每个单词中带有通配符*
符号的arraylist中。然后,一旦用户完成添加单词,我会要求用户输入第二个字符串,并用第二个字符串替换每个单词中的*
。
我的问题是,我正在尝试使用.indexOf('*')
查找每个单词中*
的位置,但jGrasp一直说它找不到符号。
import java.util.Scanner;
import java.util.ArrayList;
class Assignment5 {
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
System.out.println("Enter some words, done to stop");
ArrayList list = new ArrayList();
String e = " ";
int i;
for (i = 0; i < 100; i+=0){
e = scan.nextLine();
if (e.equals("done")){
i = 100;}
else{
list.add(e);}
}
System.out.println("Enter the replacement string");
String s = scan.nextLine();
int w;
int x;
for (w = 0; w < list.size(); w++){
x = list.get(w).indexOf('*')
if (x != -1){
list.set(x, s);}
}
System.out.println(list);
}
}
答案 0 :(得分:2)
您的ArrayList列表是Object的非泛型ArrayList,并且它知道它保持不变。是的,它实际上可能包含字符串,但ArrayList本身并不知道这一点,因此编译器只知道list.get(w)
返回一个Object而不是String类型。由于Object没有indexOf(...)
方法,因此您遇到了问题。您有两种可能的解决方案
x = ((String) list.get(w)).indexOf('*')`
List<String> list = new ArrayList<>();
,知道列表知道它包含字符串,get(w)
将返回一个String对象。第二种方式更简洁,因为这种方式编译器不允许您将非String对象添加到列表中,使代码更安全,更不容易出错。