我正在编写代码,用户将某些单词输入到数组列表中,每个单词中都包含通配符 *
符号。然后,一旦用户完成添加单词,我会要求用户提供第二个字符串,并将每个单词中的 *
替换为第二个字符串。
我的问题是我试图使用 .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);
}
}
最佳答案
您的 ArrayList 列表是一个非通用的 Object ArrayList,这就是它所知道的全部内容。是的,它实际上可能保存字符串,但 ArrayList 本身不知道这一点,因此编译器只知道 list.get(w)
返回一个对象而不是字符串类型。由于对象没有 indexOf(...)
方法,你遇到了问题。您有两种可能的解决方案
- 使用强制转换将返回的对象强制转换为字符串:
x = ((String) list.get(w)).indexOf('*')`
- 或者使用通用列表:
List<String> list = new ArrayList<>();
,其中知道列表知道它包含字符串并且get(w)
将返回一个 String 对象。第二种方法更干净,因为这样编译器将不允许您将非 String 对象添加到列表中,从而使代码更安全并且不易出现错误。
关于java - 在 Java/jGrasp 中找不到 indexOf() 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709859/