给定一个文本文件的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;
}
我有一个带附加的类型之间不兼容的错误。有人可以解决这个问题吗?
答案 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"));
}