【问题标题】:How do I convert a String to an String Array? [duplicate]如何将字符串转换为字符串数组? [复制]
【发布时间】:2015-08-17 23:37:37
【问题描述】:

我正在使用 Scanner 从文件中读取,文本包含以下内容。

[8, 3, 8, 2, 3, 4, 4, 4, 5, 8]

这最初是一个整数数组,我必须将其转换为字符串才能写入文件。现在,我需要能够将文件读回 java,但我需要能够将各个数字相加,因此我需要将此字符串重新放入数组中。有什么帮助吗?这是我所拥有的:

File f = new File("testfile.txt");  
try{
    FileWriter fw = new FileWriter(f); 
    fw.write(Arrays.toString(array1)); 
    fw.close(); 
} catch(Exception ex){
    //Exception Ignored
}

Scanner file = new Scanner(f);       
System.out.println(file.nextLine());

这会打印出数字列表,但在字符串中。我需要访问数组中的整数才能将它们相加。这是我第一次发帖,如果我搞砸了,请告诉我。

【问题讨论】:

  • 根据 'comma' 和 parseInt 分割刚刚读到的行?

标签: java arrays string readfile


【解决方案1】:

您可以使用String#substring 删除方括号,使用String#splitString 拆分为一个数组,使用String#trim 删除空格,使用Integer#parseIntStrings 转换为int 值.

在 Java 8 中,您可以为此使用 Stream API:

int[] values = Arrays.stream(string.substring(1, string.length() - 1)
                     .split(","))
                     .mapToInt(string -> Integer.parseInt(string.trim()))
                     .toArray();

为了求和,你可以使用IntStream#sum 方法,而不是最后将其转换为数组。

【讨论】:

    【解决方案2】:

    您无需在Array 中回读String,只需使用Regex

    public static void main(String[] args) throws Exception {
        String data = "[8, 3, 8, 2, 3, 4, 41, 4, 5, 8]";
        // The "\\d+" gets the digits out of the String
        Matcher matcher = Pattern.compile("\\d+").matcher(data);
    
        int sum = 0;
        while(matcher.find()) {
            sum += Integer.parseInt(matcher.group());
        }
    
        System.out.println(sum);
    }
    

    结果:

    86

    【讨论】:

      【解决方案3】:
      List<Integer> ints = new ArrayList<>();
      String original = "[8, 3, 8, 2, 3, 4, 4, 4, 5, 8]";
      String[] splitted = original.replaceAll("[\\[\\] ]", "").split(",");
      for(String s : splitted) {
          ints.add(Integer.valueOf(s));
      }
      

      【讨论】:

      • 注意空格和方括号。
      • 但是这个概念是有效的。为此,投反对票?
      • @Stewart,实际上并不是我投反对票,但您的回答不完整。虽然这个概念是有效的,但您至少应该描述您的解决方案的缺点,或者最好给出一个完整的解决方案。
      猜你喜欢
      • 2015-10-23
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2021-12-13
      • 2014-08-05
      相关资源
      最近更新 更多