从文件中删除Java中字符串中的字符

时间:2013-05-10 05:12:54

标签: java string

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

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

我想这样做,所以对于每一行,它将删除所有字符但不删除整数。

7 个答案:

答案 0 :(得分:1)

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

诀窍是将每个文本文件的行放入ArrayList中。一旦你有了,转移Pseudocode:

1)将文本文件的每一行放在ArrayList中 2)对于每一行,使用“,”拆分为数组 3)如果数组的大小大于1,则意味着有数字要总结,否则只有名称位于数组上,你应该继续下一行 4)因此大小大于1,通过Split函数生成的String []数组内的字符串进行迭代,从1到<大小(这将排除名称字符串本身)

5)使用Integer.parseInt(迭代的数字作为String)并总结

你去了

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

答案 1 :(得分: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);
}

甚至形式的字符串&#34; abcd,1,2,3,asdas,12,34,asd&#34;会给你数字的总和

答案 2 :(得分:0)

您需要将每一行拆分为一个String数组,并从索引1

开始解析数字
String[] arr = line.split(",");
for(int i = 1; i < arr.length; i++) {
   int n = Integer.parseInt(arr[i]);
   ...

答案 3 :(得分: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("[^,]*,", "");

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

答案 4 :(得分: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]);
  }

答案 5 :(得分:0)

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

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

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

  1. 将文件填入内存,如果它是一个大文件,你将耗尽内存(非常糟糕)
  2. 迭代数据2次而不是一次(可能不是世界末日)

答案 6 :(得分: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);