Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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_Text Files - Fatal编程技术网

Java 将文本中的数据存储到变量中

Java 将文本中的数据存储到变量中,java,text-files,Java,Text Files,我试图从文本文件中读取数据,并将各种数据类型存储到变量中。 假设txt文件的格式如下: a 1000 1 b 2000 2 c 3000 3 现在,我试图将字符存储到单独的变量中,将整数存储到单独的变量中 到目前为止,我的尝试涉及将文本文件读入字符串,然后使用字符串标记器将每个元素存储到数组列表中。我对如何做这件事有一个大致的想法;检查列表中的元素是否为字符,如果是,则将其存储到字符变量中;如果是整数,则将其存储到int中。 但是,我不熟悉识别某个东西是字符串还是整数的方法,比如isString

我试图从文本文件中读取数据,并将各种数据类型存储到变量中。 假设txt文件的格式如下:

a 1000 1
b 2000 2
c 3000 3

现在,我试图将字符存储到单独的变量中,将整数存储到单独的变量中

到目前为止,我的尝试涉及将文本文件读入字符串,然后使用字符串标记器将每个元素存储到数组列表中。我对如何做这件事有一个大致的想法;检查列表中的元素是否为字符,如果是,则将其存储到字符变量中;如果是整数,则将其存储到int中。 但是,我不熟悉识别某个东西是字符串还是整数的方法,比如isString、isInteger等。有人能给我一些建议吗

我的代码如下:

public class copyToString {


    public static void main(String[] args) {

        String fileSpecified = args[0];

        fileSpecified = fileSpecified.concat(".txt");
        char [] content = new char[1024];

        System.out.println ("file Specified = " + fileSpecified);

        String container;
        ArrayList <String> words = new ArrayList<String> ();


        try {
            FileReader fr = new FileReader (fileSpecified);
            BufferedReader br = new BufferedReader (fr);
            StringBuilder builder = new StringBuilder();

            int read = 0;
            while ((read = br.read(content, 0, content.length)) > 0) {
                builder.append(content, 0, read);
            }

            container = builder.toString();

            StringTokenizer tokenizer = new StringTokenizer (container);
            while (tokenizer.hasMoreTokens()) {
                words.add(tokenizer.nextToken());
            }
            fr.close();
        } catch (IOException e) {
            System.out.println (e.getMessage());
        }

        for (int i = 0; i < words.size(); i++) {
            System.out.println ("words = " + words.get(i));


        }



    }



}
公共类copyToString{
公共静态void main(字符串[]args){
字符串fileSpecified=args[0];
fileSpecified=fileSpecified.concat(“.txt”);
字符[]内容=新字符[1024];
System.out.println(“指定的文件=”+指定的文件);
字符串容器;
ArrayList words=新的ArrayList();
试一试{
FileReader fr=新的FileReader(指定文件);
BufferedReader br=新的BufferedReader(fr);
StringBuilder=新的StringBuilder();
int read=0;
而((read=br.read(content,0,content.length))>0){
builder.append(内容,0,读取);
}
container=builder.toString();
StringTokenizer tokenizer=新的StringTokenizer(容器);
while(tokenizer.hasMoreTokens()){
add(tokenizer.nextToken());
}
fr.close();
}捕获(IOE异常){
System.out.println(e.getMessage());
}
for(int i=0;i

谢谢

我非常推荐ApacheCommons库。因为这个库有一个

  • StringUtils类,该类具有用于检查字符串内容的大型方法库
  • 用于轻松读取文件的IOUtils类
此外,我将使用简单的正则表达式组来标识文本部分


有关详细信息,请参见Pattern和Matcher类。(Regex表示单词:“\w”Digits“\d”)

我非常推荐ApacheCommons库。因为这个库有一个

  • StringUtils类,该类具有用于检查字符串内容的大型方法库
  • 用于轻松读取文件的IOUtils类
此外,我将使用简单的正则表达式组来标识文本部分


有关详细信息,请参见Pattern和Matcher类。(Regex表示单词:“\w”Digits“\d”)

如果您真的不知道每种类型可能是什么,则必须将每个字段存储为字符串,例如
1000
可以是短、int、long、float、double或String。
1
是数字、字符串还是字符“1”?没有上下文,您无法知道每种类型是什么
a
b
c
可以是十六进制的数字


与重新编写代码相比,我要花更长的时间才能说出我将采取的不同做法


如果您真的不知道每种类型可能是什么,那么必须将每个字段作为字符串存储为一个数字,例如
1000
可以是短、int、long、float、double或String。
1
是数字、字符串还是字符“1”?没有上下文,您无法知道每种类型是什么
a
b
c
可以是十六进制的数字


与重新编写代码相比,我要花更长的时间才能说出我将采取的不同做法


您可以使用Scanner,它比StringTokenizer更简单。有一点不清楚。你是说输入文件格式是已知的,并给出了示例,那么为什么你想通过编程识别变量类型呢?感谢Lukasz,Scanner实际上更容易,它也会节省我的时间。我给出的输入文件格式只是为任务提供的许多输入文件格式中的一个示例。我必须考虑字符和整数分开,因为我将处理他们以不同的方式。这是您可能期望的答案吗?您可以使用Scanner—它比StringTokenizer更简单。有一点不清楚。你是说输入文件格式是已知的,并给出了示例,那么为什么你想通过编程识别变量类型呢?感谢Lukasz,Scanner实际上更容易,它也会节省我的时间。我给出的输入文件格式只是为任务提供的许多输入文件格式中的一个示例。我必须考虑字符和整数分开,因为我将处理他们以不同的方式。这是你所期望的答案吗?谢谢。如果说,txt文件包含未知长度的数据(考虑到txt文件中的数据量会有所不同),我们将不得不声明相当多的变量。现在,为了避免这样做,是否可以声明一个中等大小的字符数组,然后在其中存储字符和一个int数组,然后做同样的事情?如果你可以假设你只有char或int,你可以使用一个普通的int[](因为char适合于int)在这种情况下,我将使用split和parseInt。你将如何区分数字1和字符“1”之间的差异?我们给出的txt文件的格式将始终与我显示的格式相同。在这种情况下,每一行都有一个字母(char)开头,然后有一个int(例如:1000)和一个无符号int(例如:1)。在这种情况下,我真的需要担心区分数字1和字符“1”吗?谢谢。如果说,txt文件包含未知长度的
public class CopyToString {
    static class Line {
        String word;
        int num1, num2;

        Line(String word, int num1, int num2) {
            this.word = word;
            this.num1 = num1;
            this.num2 = num2;
        }

        @Override
        public String toString() {
            return "Line{" + "word='" + word + '\'' + ", num1=" + num1 + ", num2=" + num2 + '}';
        }
    }

    public static void main(String... args) throws IOException {
        String fileSpecified = args[0] + ".txt";
        System.out.println("file Specified = " + fileSpecified);
        BufferedReader br = new BufferedReader(new FileReader(fileSpecified));

        List<Line> lines = new ArrayList<Line>();
        for (String line; (line = br.readLine()) != null;) {
            Scanner scanner = new Scanner(line);
            lines.add(new Line(scanner.next(), scanner.nextInt(), scanner.nextInt()));
        }
        br.close();

        for (Line l : lines)
            System.out.println(l);
    }
}
file Specified = text.txt
Line{word='a', num1=1000, num2=1}
Line{word='b', num1=2000, num2=2}
Line{word='c', num1=3000, num2=3}