根据输入字符串确定var类型

时间:2018-01-28 17:05:11

标签: java arrays types

假设我们有一个名为L的数组和一个输入字符串in
如果in的表单格式为[0,1,2,3],则L应为{ {1}}包含数字0,1,2和3,但如果int[]in类似,那么<0,1,2>应该是包含字符串的L&# 34; 0&#34;,&#34; 1&#34;和&#34; 2&#34;。
这可以用Java做吗?或者有没有办法定义一个数组,接受你放入它的任何类型,然后表现得像这种类型的数组?

我已经考虑过为什么需要这个,并得出结论我可以解决它。它需要在实际代码中进行一些手动编写,这意味着它永远不会是一个可编译的程序,但除非找到解决方案,否则我只会使用这个肮脏的解决方案。谢谢您的回答!

编辑:似乎这个问题是不可能解决我想用自然Java的方式。我将使用如上所述的脏解决方案。再一次,谢谢你。这个奇怪的编辑也是我,我没有意识到我没有登录。

3 个答案:

答案 0 :(得分:1)

您可以使用Object数组,因为IntegerStringObject

           java.lang.Object
                  |
       +----------+----------+  
       |                     |
       v                     |
java.lang.Number             |
       |                     |
       v                     v
java.lang.Integer    java.lang.String

例:

Object[] array = new Object[] {
    0,          //integer value
    "hello",    //String value
}

Object[] array = new Object[2];
array[0] = 0;          //integer value
array[1] = "hello";    //String value

答案 1 :(得分:1)

正如Joe C建议的那样,您可以将其存储为Object []。

当你需要使用它时,可以使用以下代码将整个Object []转换为int []或String []:

Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class);
int[] intArray = Arrays.stream(integerArray).mapToInt(Integer::intValue).toArray();

String[] stringArray = Arrays.copyOf(a, a.length, String[].class);

答案 2 :(得分:0)

如果总有两种类型的String,那么

String s = "<1,2,4>";
Object[] oArr;
if (s.contains("["))
{  
    //extract the string between the bracket
    s = s.substring(s.indexOf("[") + 1);
    s = s.substring(0, s.indexOf("]"));
    // split by comma, which return String array and convert to Integer[]
    oArr = Arrays.stream(s.split(",")).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);

}
else
{ 
    //extract the string between the bracket
    s = s.substring(s.indexOf("<") + 1);
    s = s.substring(0, s.indexOf(">"));
    // split by comma, which return String array  
    oArr = s.split(",");
}