2016-11-20 156 views
0

我正在编写代码,其中用户通过每个单词中的通配符*符号将某些单词输入到数组列表中。然后,一旦用户完成添加单词,我要求用户输入第二个字符串,并将每个单词中的*替换为第二个字符串。在Java中找不到indexOf()符号/ 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); 




} 
} 

回答

2

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

  1. 使用强制投对象返回字符串:

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