假设我们有一个名为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的方式。我将使用如上所述的脏解决方案。再一次,谢谢你。这个奇怪的编辑也是我,我没有意识到我没有登录。
答案 0 :(得分:1)
您可以使用Object
数组,因为Integer
和String
为Object
:
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(",");
}