Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在标记后面的字符串中查找带括号的元素_Java_Java.util.scanner - Fatal编程技术网

Java 在标记后面的字符串中查找带括号的元素

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

给定一个文本文件的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(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"));
}