【问题标题】:Java how do i parse this?Java我如何解析这个?
【发布时间】:2015-08-02 02:41:07
【问题描述】:

我有一个文件,内容如下:

J1  0   90  "7,27,73,86"
J2  1   39  "12"
J3  2   195 "11,31,73,94,120,134,183"

我将第四列数字存储为字符串

 Scanner input = new Scanner( new File( "projectData.txt" ) );

      while ( input.hasNext() )
      {
        job =  input.next();//
        arrival = input.nextInt();//
        cpu = input.nextInt();
        fault = input.next();   

        jobs[i] = new MyJobs( job, arrival, cpu, fault );//stores four local variables in array
        i++;//increments I

如何解析字符串以将它们存储为整数,以便稍后将它们与我的 cpu 值进行比较?

【问题讨论】:

  • 您使用的是哪个版本的 Java?
  • 尝试用fault.split(",")分割字符串,可以使用Integer.parseInteger(fault[1]);解析为字符串。

标签: java arrays string arraylist filereader


【解决方案1】:

基本方法是使用String.substring() 删除双引号,然后用逗号将String.split() 删除为String[]。从这里您知道int[] 需要多大,因此只需遍历String[] 并将每个元素转换为int

public static void main(String[] args) throws Exception {
    String fault = "\"11,31,73,94,120,134,183\"";
    String[] pieces = fault.substring(1, fault.length() - 1).split(",");

    int[] faultNumbers = new int[pieces.length];
    for (int i = 0; i < faultNumbers.length; i++) {
        faultNumbers[i] = Integer.parseInt(pieces[i]);
    }

    System.out.println(Arrays.toString(faultNumbers));
}

结果:

[11, 31, 73, 94, 120, 134, 183]

Java 8 流

要使用流构建@alfasin 答案,可以缩短基本方法。

public static void main(String[] args) throws Exception {
    String fault = "\"11,31,73,94,120,134,183\"";
    String[] pieces = fault.substring(1, fault.length() - 1).split(",");

    // This does the job of the for loop in the basic approach
    int[] faultNumbers = Arrays.stream(pieces)
            .mapToInt(Integer::parseInt)
            .toArray();

    System.out.println(Arrays.toString(faultNumbers));
}

【讨论】:

    【解决方案2】:

    在 Java 8 中:

    String s = "11,31,73,94,120,134,183";
    Object [] res =
                    Stream.of(s.split(","))
                        .map(Integer::valueOf)
                        .collect(Collectors.toList())                                
                        .toArray();
    System.out.println(Arrays.toString(res)); // [11, 31, 73, 94, 120, 134, 183]
    

    这可能可以以更优雅的方式实现。我还在玩 Java 8... :)

    请注意,结果是一个对象数组,而不是整数,但使用强制转换很容易将每个对象“转换”为整数。

    同样的结果也可以通过用逗号分割和使用Integer.valueOf将每个子字符串转换为整数的旧方法来实现:

    String s = "11,31,73,94,120,134,183";
    String[] sArray = s.split(",");
    Integer[] res = new Integer[sArray.length];
    for (int i=0; i < sArray.length; i++) {
        res[i] = Integer.valueOf(sArray[i]);
    }
    System.out.println(Arrays.toString(res)); // [11, 31, 73, 94, 120, 134, 183]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2018-05-24
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多