Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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行列表中的arraylist中获取下一个以信息开头的字符串?_Java_For Loop_Parsing_Arraylist_Split - Fatal编程技术网

如何从java行列表中的arraylist中获取下一个以信息开头的字符串?

如何从java行列表中的arraylist中获取下一个以信息开头的字符串?,java,for-loop,parsing,arraylist,split,Java,For Loop,Parsing,Arraylist,Split,正在做一个电影项目,但遇到了一些麻烦 如果文件中有多行类似以下内容: 标题:阿凡达 导演:詹姆斯·卡梅隆 我如何使该方法起作用 代码现在没有运行 我创建了一个helper方法来查找startswith what string first,因此如果用户输入Title:或Director:,该方法将返回tile或Director的名称。但是java说我不在这里工作,这很奇怪,它说我不能解析为变量。我还意识到,如果我这样做,它将无法工作,因为用户正在输入一个字符串,但该行将包含title:name的两

正在做一个电影项目,但遇到了一些麻烦

如果文件中有多行类似以下内容:

标题:阿凡达

导演:詹姆斯·卡梅隆

我如何使该方法起作用

代码现在没有运行

我创建了一个helper方法来查找startswith what string first,因此如果用户输入Title:或Director:,该方法将返回tile或Director的名称。但是java说我不在这里工作,这很奇怪,它说我不能解析为变量。我还意识到,如果我这样做,它将无法工作,因为用户正在输入一个字符串,但该行将包含title:name的两个信息。我该如何着手使它工作

    /**
     * Lines in the file.
     */
    private List<String> lines;

    //helper method
    String getNextStringStartsWith(String str) {
        
        String[] lineArray;
        
        //iterate over list of lines
        for(i = 0; i < this.lines.size(); i++) {
            //if the specific line has that string
            if(this.lines.get(i).equals(str)) {
                lineArray = this.lines.get(i).split(":");
                info = lineArray[1].trim());
                //gets the line afterwards
                return info;
            }
        }
    }

     //Have to iterate over each line and look for lines starting with "Title:" and "Director:"
     // Set the value of this.title and this.director 
     private void setTitleAndDirector() {

        this.title = getNextStringStartsWith("Title:");
        this.director = getNextStringStartsWith("Director:");

    }
/**
*文件中的行。
*/
私有列表行;
//辅助方法
字符串getNextStringStartsWith(字符串str){
字符串[]线性排列;
//迭代行列表
对于(i=0;i
for循环的问题在于没有告诉Java变量i是哪种类型。因此Java无法为它创建变量

你的代码还有其他一些小问题

  • 当循环没有返回任何内容时,您缺少返回值
  • 您没有告诉Java变量info是哪种类型的
  • 您在lineArray[1]的行中有a)太多。trim()
这里有一个解决这些问题的方法

//helper method
    String getNextStringStartsWith(String str) {

        String[] lineArray;

        //iterate over list of lines
        for(int i = 0; i < this.lines.size(); i++) {
            //if the specific line has that string
            if(this.lines.get(i).equals(str)) {
                lineArray = this.lines.get(i).split(":");
                String info = lineArray[1].trim();
                //gets the line afterwards
                return info;
            }
        }
        return null;
    }
//helper方法
字符串getNextStringStartsWith(字符串str){
字符串[]线性排列;
//迭代行列表
对于(int i=0;i
非常感谢您。还有一个问题,我是否可以更改为包含,因为该行将有标题:Avatar,但用户只会输入标题:并且程序应该搜索前者。@XYZMath我不确定我是否完全理解您的问题。但是如果你问是否可以将equals改为contains,那么答案是可以。如果(this.lines.get(i).contains(str)){像现在这样,如果文件有一行标题:Avatar,使用上面的方法,它将不会工作,因为标题:Avatar不等于标题:,只有当我将其更改为contains时,它才能匹配条件并为我检索名称?是的,听起来正确。等于()将检查两个字符串是否100%相同,而contains()将仅检查是否可以在(更大的)字符串中找到字符串。例如,字符串“XYZMath”包含“XYZ”。