java—将字符串转换为具有不同长度的多维数组

kxe2p93d  于 2021-06-27  发布在  Java
关注(0)|答案(4)|浏览(405)

我需要通过命令行执行一个代码,该代码将提供一个多维数组,其中的元素长度不一定相等。
执行字符串如下:

start /wait java -jar testMSMWithIndex.jar  Foursquare_weather_day_root-type_type 0,1,2-3

我正在考虑传递参数“0,1,2-3”,然后将其转换为具有不同长度元素的多维数组(在本例中为{0}、{1}、{2,3})。
请注意,{0,null},{1,null},{2,3}}对我的问题不起作用。
你们知道如何开发一个方法或者直接从args获取数组吗?
我真的很感激你能提供的任何帮助。

y0u0uwnf

y0u0uwnf1#

很难说已经有什么东西可以帮你做到这一点,所以你必须自己解析这个字符串。像这样的事情可以做到:

public static int[][] parseRaggedArrayFromString(String s) throws NumberFormatException
    {
        String[] ss = s.split(",");
        int[][] result = new int[ss.length][];
        for (int i = 0; i < ss.length; ++i) {
            if (!ss[i].contains("-")) {
                result[i] = new int[1];
                result[i][0] = Integer.parseInt(ss[i]);
            } else {
                String[] range = ss[i].split("-", 2);
                int lo = Integer.parseInt(range[0]);
                int hi = Integer.parseInt(range[1]);
                int size = hi - lo + 1;
                result[i] = new int[size > 0 ? size : 1];
                int j = 0;
                do {
                    result[i][j] = lo;
                    ++lo;
                    ++j;
                } while (lo <= hi);
            }
        }
        return result;
    }
g2ieeal7

g2ieeal72#

我真的认为当你创建一个类型为 Object 因为多维数组只能容纳相同长度的数组( int[][] ). 然后通过强制转换从数组中创建和检索值。。。我在这里试着发挥创造力,适应你的要求。。

public class x {
  public static void main(String[] args) {
    Object[] arguments = new Object[args.length];
// Then make a loop to capture arguments in array..
// or add manually
    arguments[0] = new String[]{args[0]};
    arguments[1] = new String[]{args[1],args[2]};
//Then retrieve info from object later by casting
    System.out.println(java.util.Arrays.toString((String[]) arguments[1]));
  }
}
...

不过,请考虑使用集合。。。

iecba09b

iecba09b3#

当我等待答案时,我找到了解决问题的方法。
这里的相关信息是,我们不需要在其示例化中设置第二个数组维度。
代码如下:

// INPUT string = "2-3,1,4-5"
private static String[][] featuresConversion(String string) {
    String[] firstLevel = string.split(","); // 1st lvl separator

    String[][] features = new String[firstLevel.length][]; // Sets 1st lvl length only

    int i = 0;
    for (String element : firstLevel) {
        features[i++] = element.split("-");
    }

    return features;
}

我要谢谢大家。所有建议的解决方案也很好!

e4eetjau

e4eetjau4#

这基本上是一个分裂 , 以及 - . 从那里我们只需要处理数据。代码中的注解。

/**
 *
 * @author sedj601
 */
public class Main
{

    public static void main(String[] args)
    {
        String input = "0,1,2-3";

        String[] firstArray = input.split(",");//Split on ,.
        String[][] outputArray = new String[firstArray.length][];//The array that will be holding the output

        //Used to process the firstArray
        for (int i = 0; i < firstArray.length; i++) {
            if (firstArray[i].length() > 1) {//If the lenght is greater than one. split on -.
                String[] secondArray = firstArray[i].split("-");
                int arrayLength = Integer.parseInt(secondArray[1]) - Integer.parseInt(secondArray[0]) + 1;//Subtract the two numbers and add one to get the lenght of the array that will hold these values
                String[] tempArray = new String[arrayLength];
                int increment = 0;//Keeps up with the tempArray index.
                for (int t = Integer.parseInt(secondArray[0]); t <= Integer.parseInt(secondArray[1]); t++) {//loop from the first number to the last number inclusively.
                    tempArray[increment++] = Integer.toString(t);//Add the data to the array.
                }

                outputArray[i] = tempArray;//Add the array to the output array.
            }
            else {//If the lenght is 1, creat an array and add the current data.
                String[] tempArray = new String[1];
                tempArray[0] = firstArray[i];
                outputArray[i] = tempArray;
            }
        }

        //Print the output.
        for (String[] x : outputArray) {
            for (String y : x) {
                System.out.print(y + " ");
            }
            System.out.println();
        }
    }
}

输出:

--- exec-maven-plugin:1.5.0:exec (default-cli) @ JavaTestingGround ---
0 
1 
2 3 
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time:  1.194 s
Finished at: 2021-01-08T00:08:15-06:00
------------------------------------------------------------------------

相关问题