Java 在标记后面的字符串中查找带括号的元素
给定一个文本文件的StringBuilder,其格式为[1,2,3,4]B[5,6,7,8]C[9,10] 我需要创建一个方法,以便在给定文本文件的名称和要搜索的标记时 i、 e.“StringBuilder ex.txt”和“A”将分别返回包含元素的列表 1、2、3和4 我不熟悉正则表达式,所以如果可能的话,我想使用scanner。 为此,我了解到必须首先在Stringbuilder文件中使用.toString 到目前为止,我得到的是Java 在标记后面的字符串中查找带括号的元素,java,java.util.scanner,Java,Java.util.scanner,给定一个文本文件的StringBuilder,其格式为[1,2,3,4]B[5,6,7,8]C[9,10] 我需要创建一个方法,以便在给定文本文件的名称和要搜索的标记时 i、 e.“StringBuilder ex.txt”和“A”将分别返回包含元素的列表 1、2、3和4 我不熟悉正则表达式,所以如果可能的话,我想使用scanner。 为此,我了解到必须首先在Stringbuilder文件中使用.toString 到目前为止,我得到的是 Scanner sc = new Scanner(file
Scanner sc = new Scanner(fileContent.toString())
我理解用split去掉逗号的用法。我不需要一个完整的解决方案,但是在我应该首先做什么方面的任何帮助(使用数组,然后查找令牌索引是否明智,或者是否有一个我不知道的更简单的方法?)
新代码(括号中的数字字符串):
public List getPhrases(StringBuilder文件内容、字符串标记){
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader(fileContent.toString());
列表=新的ArrayList();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
if(标记器sval.equals(标记)){
标记器.nextToken();/“[”
做{
tokenizer.nextToken();//转到数字
list.append(String.valueOf(tokenizer.nval));
}while(tokenizer.nextToken()==',');
打破
}
}
退货清单;
}
我有一个类型与append不兼容的错误。有人能修复这个问题吗?使用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;
}
静态列表getElements(字符串文件内容、字符串标记){
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader(fileContent));
列表=新的ArrayList();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
if(标记器sval.equals(标记)){
标记器.nextToken();/“[”
做{
tokenizer.nextToken();//转到数字
list.append(tokenizer.nval);
}while(tokenizer.nextToken()==',');
打破
}
}
退货清单;
}
使用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;
}
静态列表getElements(字符串文件内容、字符串标记){
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader(fileContent));
列表=新的ArrayList();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
if(标记器sval.equals(标记)){
标记器.nextToken();/“[”
做{
tokenizer.nextToken();//转到数字
list.append(tokenizer.nval);
}while(tokenizer.nextToken()==',');
打破
}
}
退货清单;
}
静态列表getList(字符串内容、字符串名称){
int namePos=content.indexOf(name);
//如果找不到名称,则返回null
if(namePos<0)返回null;
//从namePos开始,查找数组的开始和结束
int start=content.indexOf(“[”,namePos),
end=content.indexOf(“]”,namePos);
//获取“[”和“]”之间的子字符串,并按“,”拆分数据
String[]strArray=content.substring(开始+1,结束).split(“,”)
列表l=新阵列列表(strArray.length);
//转换为双精度
用于(字符串str:strArray)
l、 add(Double.parseDouble(str));
返回l;
}
公共静态void main(字符串…字符串){
//返回[1.0,2.0,3.0,4.0]
系统输出打印(getList(“A[1,2,3,4]B[5,6,7,8]C[9,10],“A”);
}
静态列表getList(字符串内容、字符串名称){
int namePos=content.indexOf(name);
//如果找不到名称,则返回null
if(namePos<0)返回null;
//从namePos开始,查找数组的开始和结束
int start=content.indexOf(“[”,namePos),
end=content.indexOf(“]”,namePos);
//获取“[”和“]”之间的子字符串,并按“,”拆分数据
String[]strArray=content.substring(开始+1,结束).split(“,”)
列表l=新阵列列表(strArray.length);
//转换为双精度
用于(字符串str:strArray)
l、 add(Double.parseDouble(str));
返回l;
}
公共静态void main(字符串…字符串){
//返回[1.0,2.0,3.0,4.0]
系统输出打印(getList(“A[1,2,3,4]B[5,6,7,8]C[9,10],“A”);
}
谢谢!在我正在使用的特定程序中,列表实际上是一个字符串列表。在修改提供的代码以适应程序时,我遇到了错误list.append不处理字符串。您建议怎么做?将列表更改为列表
谢谢,实际上我已经尝试过了,而且有一些原因我还尝试了将toString应用于tokenizer.nval和将nval更改为sval的组合。我更新了上面的代码以匹配当前使用的版本。更改为list.append(tokenizer.sval)
应该做这项工作。字符串是否被引用?谢谢!在我正在使用的特定程序中,列表实际上是一个字符串列表。在修改提供的代码以适应程序时,出现了错误list.append不处理字符串。您建议做什么?将列表
更改为列表
谢谢实际上,我已经尝试过了,但由于某些原因,它不起作用。我还尝试过将toString应用于tokenizer.nval,并将nval更改为sval。我已经更新了上面的代码,以匹配当前使用的版本。更改为list.append(tokenizer.sval);
应该可以完成这项工作。字符串是否引用了?
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"));
}