【问题标题】:How to insert text read strings into specific variables如何将文本读取字符串插入特定变量
【发布时间】:2015-02-04 06:42:44
【问题描述】:

我在将简单文本文件的每一行插入到我希望它转到的特定变量中时遇到问题。例如,我的文本文件是这样排序的(文本文件中的字符串之间没有空格,只是这个编辑器会将它们放在一起)

达拉斯

78 楼

北,15 英里/小时

达拉斯图片

丹佛

29 楼

向南,10 英里/小时

丹佛图片

我希望达拉斯在城市变量中,在温度变量中为 78f,依此类推,直到文本结束,此刻全部进入城市变量,一切都从那里打印出来!我知道扫描仪有下一行,但之前从未使用过,所以我被困在这里。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Textreader {

    public static void main(String[] args) {
        try {
                        String city ="a";
                        String temp ="b";
                        String wind ="c";
                        String image = "d";
            File file = new File("load.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                              city = stringBuffer.append(line).toString();
                              stringBuffer.append("\n");
                               //city = line.toString();
                               temp = stringBuffer.append(line).toString();
                                wind  = line;
                                image = line;
                //stringBuffer.append(line);
                //stringBuffer.append("\n");
            }
            fileReader.close();
            System.out.println("Contents of file:");
                        System.out.println(city);
                        System.out.println(temp);
                        
            //System.out.println(stringBuffer.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java string text-files bufferedreader filereader


    【解决方案1】:

    您必须调用bufferedReader.readLine() 来检索下一行。

    while ((line = bufferedReader.readLine()) != null) {
        city = line;
        temp = bufferedReader.readLine();
        wind = bufferedReader.readLine();
        image = bufferedReader.readLine();
    }
    

    【讨论】:

    • 我是否必须将它们转换为我尝试过的字符串,但都返回 null。
    【解决方案2】:

    查看 java.util.Scanner 类。你可以用它做这样的事情:

    Scanner s = new Scanner(file);
    Pattern pattern = Pattern.compile("(.+?)\n(.+?)\n(.+?)\n(.+?)\n");
    while(s.findWithinHorizon(pattern, 0) != null) {
      MatchResult result = s.match();
      city = result.group(1); 
      temp = result.group(2);
      wind = result.group(3);
      img  = result.group(4);
      // etc. (Note that the next pass through the loop will override these variables 
      // so, unless you save the values somewhere, you will end up with them holding last
      // entry from your file once the loop is done. 
    }
    

    【讨论】:

    • 我必须在程序中进一步使用缓冲阅读器,以上所有建议都没有帮助。
    • 不,你不能在“程序的后面”使用同一个阅读器,因为到那时你已经阅读了它的所有内容。如果某些“没有”帮助,则可能意味着您误解或使用错误。如果您需要更多帮助,请提供比“没有帮助”更多的信息.​​.....并展示您的工作。
    【解决方案3】:

    您的问题在于您的变量“line”没有改变他的内容并在所有变量中重复。将所有行读入集合或数组,然后继续。像这样的:

    整数计数 = 0; 字符串 [] 行 = 新字符串 [4]; 字符串线; while ((line = bufferedReader.readLine()) != null) { 线[计数器++] =线; } 城市=线[0]; 温度=线[1]; // ....

    【讨论】:

    • 我采用了这种方法,但它确实增加了,但它保持读取前一行并包括它的所有内容。例如对于 line[1] ,它读取 Dallas, 78 f,对于 line[2] 它读取 Dallas, 78F North , 15mph
    • 嗨,我的错。在这个上走得太快了。我更正了代码。这是一个简单的示例,并不是处理它的最佳方法。不过,它会为你完成这项工作。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2017-03-18
    • 2012-11-10
    相关资源
    最近更新 更多