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

时间:2016-11-20 21:57:47

标签: java arraylist jgrasp

我正在编写代码,用户将某些单词输入到每个单词中带有通配符*符号的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);




}
}

1 个答案:

答案 0 :(得分:2)

您的ArrayList列表是Object的非泛型ArrayList,并且它知道它保持不变。是的,它实际上可能包含字符串,但ArrayList本身并不知道这一点,因此编译器只知道list.get(w)返回一个Object而不是String类型。由于Object没有indexOf(...)方法,因此您遇到了问题。您有两种可能的解决方案

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