2

如何从该文件中的数据中删除字符以便总结数字?

Alice Jones,80,90,100,95,75,85,90,100,90,92
Bob Manfred,98,89,87,89,9,98,7,89,98,78

我想对每一行执行此操作,它将删除所有字符但不删除整数。

4

7 回答 7

1

以下代码可能对您有用,请尝试运行一次,

public static void main(String ar[])
{
    String s = "kasdkasd,1,2,3,4,5,6,7,8,9,10";

    int sum=0;
    String[] spl = s.split(",");
    for(int i=0;i<spl.length;i++)
    {
        try{
            int x = Integer.parseInt(spl[i]);
            sum = sum + x;
        }
        catch(NumberFormatException e)
        {
            System.out.println("error parsing "+spl[i]);
            System.out.println("\n the stack of the exception");
            e.printStackTrace();
            System.out.println("\n");
        }
    }   
    System.out.println("The sum of the numbers in the string : "+ sum);
}

即使是“abcd,1,2,3,asdas,12,34,asd”形式的字符串也会给你数字的总和

于 2013-05-10T06:36:32.517 回答
0

假设,字符串的格式是固定的。

        String s = "Alice Jones,80,90,100,95,75,85,90,100,90,92";

起初,我会摆脱角色

        Matcher matcher = Pattern.compile("(\\d+,)+\\d+").matcher(s);
        int sum = 0;

在得到整数字符串后,用逗号分隔,我会将它们拆分为字符串数组,将其解析为整数值并对整数求和:

        if (matcher.find()){
            for (String ele: matcher.group(0).split(",")){
                sum+= Integer.parseInt(ele);
            }
        }
        System.out.println(sum);
于 2013-05-10T07:14:43.157 回答
0

当然,您可以使用 split 方法,提供“,”作为参数,但这还不是全部。

诀窍是将每个文本文件的行放入一个 ArrayList。一旦你有了它,向前移动伪代码:

1) 将文本文件的每一行放入一个 ArrayList 2) 对于每一行,使用 "," 拆分为一个数组 3) 如果 Array 的大小大于 1,则表示有数字需要求和,否则只有名称位于数组上,您应该继续下一行 4) 所以大小大于 1,遍历由 Split 函数生成的 String[] 数组中的字符串,从 1 到 < Size(这将排除名称字符串本身)

5) 使用 Integer.parseInt( iterated number as String ) 并总结

给你

如果字符串不是数字但您将每一行放入 ArrayList 并排除名称,则会发生数字格式异常,因此应该没有问题:)

于 2013-05-10T05:35:17.777 回答
0

有几个 CsvReader/Writers 可能对您处理 CSV 数据有所帮助。除此之外:

  • 我不确定你是否在总结行?列?两个都?在任何情况下创建一个目标和计数器数组 int[] sums(或只是一个 int sum)
  • 读取一行,然后使用拆分(有点重,但清晰)或通过自己将行解析为数字来处理它(可能会产生更少的垃圾并更快地工作)。
  • 将数字添加到计数器
  • 继续直到文件结束

在开始处理之前加载整个文件不是一个好主意,因为您正在做两件坏事:

  1. 将文件填充到内存中,如果它是一个大文件,您将耗尽内存(非常糟糕)
  2. 迭代数据 2 次而不是 1 次(可能不是世界末日)
于 2013-05-10T06:52:59.450 回答
0

尝试这个:

  String input = "Name,2,1,3,4,5,10,100";
  String[] strings = input.split(",");
  int result=0;
  for (int i = 1; i < strings.length; i++)
  { 
    result += Integer.parseInt(strings[i]);
  }
于 2013-05-10T05:24:00.497 回答
0

您需要将每一行拆分为一个字符串数组并解析从索引 1 开始的数字

String[] arr = line.split(",");
for(int i = 1; i < arr.length; i++) {
   int n = Integer.parseInt(arr[i]);
   ...
于 2013-05-10T05:15:31.763 回答
0

好吧,如果您知道它是一个 CSV 文件,采用这种精确格式,您可以读取该行,执行 string.split(',') 然后忽略结果数组中第一个返回的字符串。请参阅 Evgenly 的回答。

编辑:这是完整的程序:

class Foo {
  static String input = "Name,2,1,3,4,5,10,100";
  public static void main(String[] args) {
    String[] strings = input.split(",");
    int result=0;
    for (int i = 1; i < strings.length; i++)
    { 
      result += Integer.parseInt(strings[i]);
    }
    System.out.println(result);
  }
}

(哇,在没有导入任何东西之前我从来没有写过程序。)

这是输出:

125

如果您对解析文件不感兴趣,而只想删除第一个字段;然后拆分它,忽略第一个字段,然后重新加入其余字段。

String[] fields = line.split(',');
StringBuilder sb = new StringBuilder(fields[1]);
for (int i=2; i < fields.length; ++i)
    sb.append(',').append(fields[i]);
line = sb.toString();

您还可以使用模式(正则表达式):

line = line.replaceFirst("[^,]*,", "");

当然,这假设第一个字段不包含逗号。如果是这样,事情就会变得更加复杂。我假设逗号以某种方式转义。

于 2013-05-10T05:15:51.773 回答