在 Java/jGrasp 中找不到 indexOf() 符号

Cannot find indexOf() symbol in Java/jGrasp

我正在编写代码,其中用户将某些单词输入到数组列表中,每个单词中都带有通配符 * 符号。然后,一旦用户完成添加单词,我会要求用户提供第二个字符串,并将每个单词中的 * 替换为第二个字符串。

我的问题是我正在尝试使用 .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 列表是对象的非泛型 ArrayList,这就是它所知道的全部内容。是的,它实际上可能包含字符串,但 ArrayList 本身并不知道这一点,因此编译器只知道 list.get(w) return 是一个 Object 而不是 String 类型。由于 Object 没有 indexOf(...) 方法,因此您 运行 遇到了问题。您有两种可能的解决方案

  1. 使用强制转换将对象 return 转换为字符串:

 x = ((String) list.get(w)).indexOf('*')`
  1. 或使用通用列表:List<String> list = new ArrayList<>();,其中知道该列表知道它包含字符串,并且 get(w) 将 return 一个字符串对象。第二种方式更简洁,因为这样编译器将不允许您将非字符串对象添加到列表中,从而使代码更安全且不易出错。