【问题标题】:Save multiple strings into one string将多个字符串保存为一个字符串
【发布时间】:2014-06-19 21:31:50
【问题描述】:

我想将多个字符串保存在一个中。问题是,我不知道它可能有多少个字符串。 我正在创建一个程序,它从文本文件中读取卡路里并将它们存储在相应的数组中。

以下是部分文字:

 Description of food                         Fat  Food Energy Carbohydrate Protein     Cholesterol Weight Saturated Fat
                                           (Grams) (calories)   (Grams)   (Grams)     (Milligrams) (Grams)  (Grams)


 APPLES, RAW, PEELED, SLICED   1 CUP          0        65          16         0        0       110      0.1
 APPLES, RAW, UNPEELED,2 PER LB1 APPLE        1       125          32         0        0       212      0.1
 APPLES, RAW, UNPEELED,3 PER LB1 APPLE        0        80          21         0        0       138      0.1
 APRICOT NECTAR, NO ADDED VIT C1 CUP          0       140          36         1        0       251       0

现在对于食物名称,我有一个数组 foodName。我将阅读整个字符串,直到达到一个 int 值。

这是我到目前为止所做的:

Scanner input = new Scanner("Calories.txt");
while (input.hasNext()) {
    String[] words = input.next().split(" ");
    int lastI;
    for (int i=0; i < words.length; i++) {
        if (isNumeric(words[i])) {
            lastI = i;
            for(int j=lastI; j>=0; j++){
                //What should I put here?
            }
        }
    }
}

public static boolean isNumeric(String str) {
    try {
        double d = Double.parseDouble(str);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

对于最里面的 for 循环,我记录了最后一个索引,这样我就可以从它开始并向后移动。

问题1:如果我在第二行倒退,我会复制这两行。

问题2:如何将名称的所有字符串保存在foodName的一个索引中?

感谢所有帮助:)

【问题讨论】:

  • 查看StringBuilder 类。它可能是你想要的。
  • 你能改变文件的格式吗?通常在使用平面文件时,您会希望使用标准格式,例如 CSV(逗号分隔值)文件。这样您就可以在每个逗号上进行拆分。然后循环遍历数组中的每个值,直到找到一个数字,然后移动到下一行。
  • for(int j=lastI; j&gt;=0; j++) 这是一个非常糟糕的主意。另外,您的问题似乎不清楚。你到底想要什么作为一个字符串?你的意思是一个字符串数组还是一个字符串?该文件示例的格式是否准确?
  • 我想要一串食物名称的多串。 say foodName[0] = "苹果,生的,去皮的,切片的";是的。

标签: java string file


【解决方案1】:

您在 Java 中查找的内容称为 StringBuilder。您可以像使用字符串一样使用它并继续附加到它上面。

File file = new File("output.txt");
Scanner input = new Scanner(file);
StringBuilder sb = new StringBuilder();
while (input.hasNextLine()) {
    String[] words = input.nextLine().split(" ");
    for (int i = 0; i < words.length; i++) {
        if (isNumeric(words[i])) {
            break;
        }
        sb.append(words[i] + " ");
    }
    System.out.println(sb);
    sb = new StringBuilder();
}
input.close();

它的作用是逐行读取文件,创建一个字符串数组,将行分隔在“”上。然后,它遍历数组中的每个字符串并检查它是否是一个数字,如果是,它将中断当前循环并移动到下一行。

我在每一行之后打印了StringBuilder,然后重置,你应该用你想要的任何功能替换它。

也给你一些建议:

  1. 使用 CSV 文件。用逗号而不是空格分隔所有内容,这使得解析变得非常容易。
  2. 使用正则表达式检查字符串是否为数字而不是捕获异常,它更优雅。

由于您格式化文件的方式,这个输出有点有趣。您正在解析“”,但您在文件中添加了一堆额外的“”字符以使格式看起来不错。这会严重破坏您的解析。但是,当您修复平面文件的格式时,此方法将为您正确解析。

输出是:(注意每一行都是一个单独的字符串。你可以看到文件格式是如何弄乱输出的)

Description of food                         Fat  Food Energy Carbohydrate Protein     Cholesterol Weight Saturated Fat 
                                       (Grams) (calories)   (Grams)   (Grams)     (Milligrams) (Grams)  (Grams) 


 APPLES, RAW, PEELED, SLICED   
 APPLES, RAW, UNPEELED,2 PER LB1 APPLE        
 APPLES, RAW, UNPEELED,3 PER LB1 APPLE        
 APRICOT NECTAR, NO ADDED VIT C1 CUP      

【讨论】:

  • 任何时候,我都很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2011-06-14
  • 2013-05-28
相关资源
最近更新 更多