在令牌后面的字符串中查找括号内的元素

时间:2013-11-29 22:04:44

标签: java java.util.scanner

给定一个文本文件的StringBuilder,格式为A [1,2,3,4] B [5,6,7,8] C [9,10]

我需要创建一个方法,以便在给定文本文件的名称和要搜索的标记时 即分别为“StringBuilder ex.txt”和“A”,它将返回带有元素的列表 1,2,3和4。

我不熟悉正则表达式,所以我想尽可能使用扫描仪。 为此,我了解到必须首先在Stringbuilder文件中使用.toString。

所以到目前为止我所拥有的是

Scanner sc = new Scanner(fileContent.toString())

我理解使用split来取出逗号。我不需要一个完整的解决方案,但是我应该先做什么帮助(使用数组是明智的,然后寻找令牌的索引,还是有一个我不知道的更简单的方法?)帮助

新代码(括号中的字符串数组):

    public List<String> getPhrases(StringBuilder fileContent, String token) {
      StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(fileContent.toString()));
      List<String> list = new ArrayList<String>();
      while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
        if (tokenizer.sval.equals(token)) {
          tokenizer.nextToken();  // '[' 
          do {
            tokenizer.nextToken();  // go to the number
            list.append(String.valueOf(tokenizer.nval));
          } while (tokenizer.nextToken() == ',');
          break;
        }
      } 
      return list;
    }

我有一个带附加的类型之间不兼容的错误。有人可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

使用StreamTokenizer。

static List<Double> getElements(String fileContent, String token) {
  StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(fileContent));
  List<Double> list = new ArrayList<Double>();
  while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
    if (tokenizer.sval.equals(token)) {
      tokenizer.nextToken();  // '[' 
      do {
        tokenizer.nextToken();  // go to the number
        list.append(tokenizer.nval);
      } while (tokenizer.nextToken() == ',');
      break;
    }
  } 
  return list;
}

答案 1 :(得分:0)

static List<Double> getList(String content, String name) {
    int namePos = content.indexOf(name);

    // return null if name not found
    if(namePos < 0) return null;

    // starting from namePos, find start and end of array
    int start = content.indexOf("[", namePos),
          end = content.indexOf("]", namePos);

    // get substring between "[" and "]", and split data by ","
    String[] strArray = content.substring(start + 1, end).split(",")

    List<Double> l = new ArrayList<Double>(strArray.length);

    // convert to Double
    for(String str : strArray)
        l.add(Double.parseDouble(str));

    return l;
}

public static void main(String...strings){
    // returns [1.0, 2.0, 3.0, 4.0]
    System.out.print(getList("A [1, 2, 3, 4] B [5, 6, 7, 8] C [9, 10]", "A"));
}