2017-03-02 59 views
1

我正在一个程序,我从用户的输入,我输入24长度String与数字0-5和每个数字在该行重复4次。一个例子就是这样的000011112222333344445555。我意识到当我收集用户的号码时,我无法在2d int array of [6][4]中收到号码。这是我想要的,所以我想要做的就是取出该字符串,并将每个数字放在该数组中。所以它看起来像这样[[0,0,0,0],[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4],[5,5,5,5]]。我不知道如何让它们进入像这样的数组。我知道字符串是不可变的,所以我不能改变字符串,但我确实认为我可以把字符串变成char数组,然后将每个值插入到我想要的int数组中。我不知道如何做到这一点,任何帮助或指导如何解决这个问题将非常感激。在此先感谢取一个字符串,并把它变成一个二维数组Java

+0

你在正确的轨道上,尝试的东西,然后张贴代码,我们会解决它。 – SQLMason

+0

好吧,我想即将分毫不差什么,因为它的东西我在Java中@DanAndrews所做 – cuber

+0

转换成翻番,然后利用模量,这样就可以分别得到每个整数用分提醒,放入和2darray –

回答

3

你可以用一个衬垫让你的二维数组:

int[][] numbers = Arrays.stream("000011112222333344445555".split("(?<=\\G.{4})")).map(s -> (Arrays.stream(s.split("(?<=\\G.{1})")).mapToInt(Integer::parseInt).toArray())).toArray(int[][]::new); 
+1

这也行不通,真棒,你能够做到这一切一行,我不知道很多正则表达式,但它完成了工作:) – cuber

+1

非常好的解决方案! – SQLMason

0

所以,你知道你的字符串必须有4个重复元素,我假设4次重复后,一个新的值如下。对我来说,它看起来像一个N×4阵列。

因此你可以这样做,现在我将伪代码来指导你。

INT [] [] myArray的=新INT [str.length/4] [4]

我们把四个,因为我们知道,如果我们有 “000011112222” 我们的总长度为12 12/4是3,我们期望3列。 4是我们拥有的柱子数量,我们知道它将只有4.

之后,在这里我假设你是一个接一个地输入值,没有任何分隔符。我们可以这样做:

int col = 0; 
    int row = 0; 
for(i from 0 to string length) { 
    if((I+1) % 4 != 0) { 
     //keep adding to myArray[row][col] 
     //row++ 
     } 
    } else { // so we now hit new numbers 
     col++; 
     row = 0; 
     } 
} 

所以在这里我试图坚持只有一个for-loop。我正在考虑用双for循环来做这件事,但我不确定在这种情况下我会如何处理它,因为我们最初正在处理一个空数组。

快速编辑,你可以做的一件事,顺便说一句。是做一个二维表像这样:

List<List<String>> strings = new ArrayList<List<String>>() 

int index = 0; 
while (index < text.length()) { 
    String pattern = text.substring(index, Math.min(index + 4,text.length())); 
    List<String> splitPattern = Arrays.asList(pattern.split("")); 
    strings.add(splitPattern); 
    index += 4; 
} 

所以这里的逻辑是,我们做一个字符串,将它的“”所以没有什么。换句话说它只会产生0,0,0,0作为分隔符是什么。然后我们将它添加到我们的列表列表中,并通过说strings.get(I).get(j);来访问它。

1

所以它相当容易做的事情。

lets assume your string is str; 

char[] strArr = str.toCharArray(); 

// numbers is the range like 0 to 5 here. 
// repeatCount is how many times its repeating like 4 here. 

int arr[][] = new int[numbers][repeatCount]; 

for(int i = 0; i < numbers; i++){ 
    for(int j = 0; j < repeatCount; j++){ 
     arr[i][j] = strArr[i*repeatCount + j]-'0'; 
    } 
} 

最后一项预防措施,如果你的数字是个位数,因为只有一个字符被选择这个功能才有效。

+0

我并不是真的担心如果数字重复4次,而他们是0-5,因为他们总是确保是。我只是想知道如何采取这一措施,并把它变成一个[6] [4] – cuber

+0

的数组好吧,让我解释一下。 1)使用String类函数toCharArray()将字符串隐藏到char数组中。 – vk3105

+0

我已经完成了 – cuber

1

测试在https://www.compilejava.net/同样适用,如果你有不同的东西比:

我的输入与数字0-5 24长度的字符串,并且每个数字是 在线路重复4次

import java.util.ArrayList; 
public class HelloWorld 
{ 

    public static void main(String[] args) 
    { 
    String s = "00001111222233334444555599"; 
    ArrayList<ArrayList<Integer>> collection = new ArrayList<ArrayList<Integer>>(); 
    for (int i = 0; i <= 9; i++){ 
     collection.add(new ArrayList<Integer>()); 
    } 

    for (int i = 0; i < s.length(); i++){ 
     int c = Character.getNumericValue(s.charAt(i));   
     collection.get(c).add(c); 
    } 

    for (int i = 0; i <= 9; i++){ 
     System.out.println(collection.get(i)); 
    } 

    System.out.println(collection); 
    } 
} 

结果:

[0, 0, 0, 0] 
[1, 1, 1, 1] 
[2, 2, 2, 2] 
[3, 3, 3, 3] 
[4, 4, 4, 4] 
[5, 5, 5, 5] 
[] 
[] 
[] 
[9, 9] 
[[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5], [], [], [], [9, 9]] 
+0

什么'int'的尺寸来完成引用类型? – cuber

+0

它是否正确,你是否知道NPE's?ints [c] .add(c)'不会将任何东西添加到'c' – cuber

相关问题