1

我需要解析一个字符串并将它们存储在一个二维双数组中。我的字符串是

-0.06409677515180673  0.12516724483856012  -0.06188844693840026  0.1542289929525214  -0.06603595481351604  0.07823062287735344  0.10161817634744892  $ -0.33597610014929263

double[][] A =     -0.06409677515180673
                    0.12516724483856012  
                   -0.06188844693840026  
                    0.1542289929525214  
                   -0.06603595481351604  
                    0.07823062287735344  
                    0.10161817634744892
double [][] B = -0.33597610014929263

它们都应该是列二维数组。

我尝试用 $ ​​拆分,但它不起作用。我试过的

String getpart = "my string";
double[][] A = null;

String[] parts = getpart.split("\\$");
            String part1 = parts[0];
            String part2 = parts[1];
           /*checking for part 1*/
            int i = 0;
            StringTokenizer st= new StringTokenizer(part1," ");
            String getdata = null;
            while (st.hasMoreTokens()) {
                int j=0;
                getdata = st.nextToken();
                A[i][j] = Double.parseDouble(getdata);
                i++;
            }

但显示空指针异常A[i][j] = Double.parseDouble(getdata);

有什么建议么?

4

4 回答 4

4

要使用 $ 作为分隔符进行拆分,您必须在正则表达式中使用转义字符“\”。

String[] inputs = input.split("\\$");

使用“$”拆分后,您可以使用空格拆分以获取每个双精度值

inputs[0].split(" ");
于 2013-11-06T09:03:27.997 回答
1

尝试用 $ ​​拆分,但它不起作用

在 Java 中,对于 的实例str,函数围绕给定正则表达式的匹配项拆分字符串String,以查找要与给定模式匹配的模式。但是,正则表达式允许通过称为边界匹配器的匹配指定位置来查找模式。就是这样一个边界匹配器,它代表. 但是,如果您想绕过它作为边界匹配器的使用,则需要对其进行转义。例如,str.split(String regex)regex$The end of a linestr.split("\\$")

s[]拆分后,您应该有一个包含字符串拆分的数组\\$,您必须拆分每个字符串,s以便\\s+用空格拆分:

    String s[] = str.split("\\$");

    String dVal[] = s[0].split("\\s+");
    double A[] =  new double[dVal.length];

    int i = 0;
    for(String data: dVal)
    {
        A[i++] = Double.parseDouble(data);
    }

参考:

  1. 边界匹配器
于 2013-11-06T09:22:56.003 回答
0

尝试这个:

@Test
public void test() throws Exception {
    String stringToSplit = "-0.06409677515180673  0.12516724483856012  -0.06188844693840026  0.1542289929525214  -0.06603595481351604  0.07823062287735344  0.10161817634744892  $ -0.33597610014929263";
    String[] splitArrayPhaseA = stringToSplit.split("\\s*\\$\\s*");

    String[][] stringValues = new String[splitArrayPhaseA.length][];
    double[][] doubleValues = new double[splitArrayPhaseA.length][];
    for (int i = 0; i < splitArrayPhaseA.length; i++) {
        stringValues[i] = splitArrayPhaseA[i].split("\\s+");
        doubleValues[i] = new double[stringValues[i].length];
        for (int j = 0; j < stringValues[i].length; j++) {
            doubleValues[i][j] = Double.parseDouble(stringValues[i][j]);
        }
    }

    double[][] a = new double[1][];
    double[][] b = new double[1][];
    a[0] = doubleValues[0];
    b[0] = doubleValues[1];

    for (double doubleValue : a[0]) {
        System.out.println("First array in 2D array [a] element value: " + doubleValue);
    }
    for (double doubleValue : b[0]) {
        System.out.println("First array in 2D array [b] element value: " + doubleValue);
    }
}

编辑:更新代码以将结果存储在二维数组 a 和 b 中。运行代码的结果应该是:

First array in 2D array [a] element value: -0.06409677515180673
First array in 2D array [a] element value: 0.12516724483856012
First array in 2D array [a] element value: -0.06188844693840026
First array in 2D array [a] element value: 0.1542289929525214
First array in 2D array [a] element value: -0.06603595481351604
First array in 2D array [a] element value: 0.07823062287735344
First array in 2D array [a] element value: 0.10161817634744892
First array in 2D array [b] element value: -0.33597610014929263
于 2013-11-06T09:41:39.423 回答
0

尝试这个。这是工作代码。

String stringToSplit = "-0.06409677515180673  0.12516724483856012  -0.06188844693840026  0.1542289929525214  -0.06603595481351604  0.07823062287735344  0.10161817634744892  $ -0.33597610014929263";

        String[] splitArrayPhaseA = stringToSplit.split("\\$");
        String part1 = splitArrayPhaseA[0];
        String part2 = splitArrayPhaseA[1];

        /*
         * Part 1
         */
        String[] innersplitpart1 = part1.split("  ");

        String[][] omegastr = new String[innersplitpart1.length][];
        int omegar = 0;
        for (String omegakeyrow : innersplitpart1) {
            omegastr[omegar++] = omegakeyrow.split("  ");
        }

        String[] innersplitpart2 = part2.split("  ");

        String[][] gamastr = new String[innersplitpart2.length][];
        int gamar = 0;
        for (String gamakeyrow : innersplitpart2) {
            gamastr[gamar++] = gamakeyrow.split("  ");
        }
        /*
         * part1 and part2 to double
         */

        double[][] A = new double[omegastr.length][omegastr[0].length];
        double[][] B = new double[gamastr.length][gamastr[0].length];

        for(int vali =0;vali< omegastr.length ;vali ++){
               for(int valj = 0;valj <omegastr[0].length;valj++){
                  A[vali][valj] = Double.parseDouble(omegastr[vali][valj]);
               }

           }
        for(int valgi =0;valgi< gamastr.length ;valgi ++){
               for(int valgj = 0;valgj <gamastr[0].length;valgj++){
                   B[valgi][valgj] = Double.parseDouble(gamastr[valgi][valgj]);
               }

           }
        System.out.println(omegastr.length+":"+omegastr[0].length);
        System.out.println("Part 1");
       for(int vali =0;vali< A.length ;vali ++){
           for(int valj = 0;valj <A[0].length;valj++){
               System.out.print(A[vali][valj]+ "\t");
           }
           System.out.println(""); 
       }
       System.out.println();
       System.out.println("Part 2");
       for(int vali =0;vali< B.length ;vali ++){
           for(int valj = 0;valj <B[0].length;valj++){
               System.out.print(B[vali][valj]+ "\t");
           }
           System.out.println("");
       }

输出

7:1
Part 1
-0.06409677515180673    
0.12516724483856012 
-0.06188844693840026    
0.1542289929525214  
-0.06603595481351604    
0.07823062287735344 
0.10161817634744892 

Part 2
-0.33597610014929263    
于 2013-11-07T03:56:43.347 回答