Java 如何将此数组分解为类似字母类型的子数组(在连续位置)

Java 如何将此数组分解为类似字母类型的子数组(在连续位置),java,arrays,Java,Arrays,例如。, 输入数组是: String array = {"0","0","0","K","K","B","P","P","P","Z", "Z","D","D","E","E","F","N","O","O} 输出: first sub-array = {"O,O,O"} second sub-array = {"K","K"} third sub-array = {"O","O"} 如果要寻找连续区域,可以使用循环,因为顺序很重要 List<List&

例如。, 输入数组是:

String array = {"0","0","0","K","K","B","P","P","P","Z",
                "Z","D","D","E","E","F","N","O","O}
输出:

first sub-array = {"O,O,O"}
second sub-array = {"K","K"}
third sub-array = {"O","O"}

如果要寻找连续区域,可以使用循环,因为顺序很重要

List<List<String>> continuous = new ArrayList<>();
List<String> current;
String last = null;
for(String s: array){
    if(!s.equals(last)){
        current = new ArrayList<>();
        continuous.add(current);
    }
    current.add(s);
    last=s;
}

假设您不知道要寻找多少不同的字符,那么一个可能的解决方案就是使用地图:

Map<String,List<String>> map = new HashMap<>();  
for(int i = 0; i < array.length; i++){  
 if(map.containsKey(array[i])  
  map.get(array[i]).add(array[i]);  
 else  
  map.put(array[i],array[i]);
}
Map Map=newhashmap();
对于(int i=0;i
然而,就我个人而言,我认为可以用参数样式的方法简化您的问题。这是说,您只需存储一个计数器,而不是存储要查找的每个字符串模式的每次出现。因此,假设您不知道要查找的不同模式有多少,您可以这样做:

Map<String,Integer> map = new HashMap<>();  
for(int i = 0; i < array.length; i++){  
 map.put(array[i], new Integer(map.get(array[i]).intValue() + 1);
}
Map Map=newhashmap();
对于(int i=0;i
您可以创建一个以字符串作为索引、以整数作为值的映射。 然后可以循环此数组,并将数组的值指定为映射的索引,并不断增加整数值

例如,您可以在循环中添加这些线,您将拥有一个映射:

Map<String, Integer> myCharMap = new HashMap<String, Integer>();
myCharMap.put(array[index], new Integer(myCharMap.get(array[index]).intValue()+1));
Map myCharMap=newhashmap();
put(数组[index],新整数(myCharMap.get(数组[index]).intValue()+1));

您可以在下面的代码中使用堆栈进行签出

String data[] = { "0", "0", "0", "K", "K", "B", "P", "P", "P", "Z", "Z", "D", "D", "E", "E", "F", "N" };
// a = ['0','0','0','K','K','P','P','P','Z']

Stack<String> stack = new Stack<String>();
String prevValue = data[0];

for (int i = 1; i < data.length; i++) {
    if (data[i].equals(data[i - 1])) {
        prevValue = prevValue + data[i];
    } else {
        stack.push(prevValue);
        prevValue = data[i];
    }
}
stack.push(prevValue);
System.out.println(stack);
字符串数据[]={“0”、“0”、“0”、“K”、“K”、“B”、“P”、“P”、“P”、“Z”、“Z”、“D”、“D”、“E”、“E”、“F”、“N”};
//a=['0','0','0','K','K','P','P','P','Z']
堆栈=新堆栈();
字符串值=数据[0];
对于(int i=1;i
Define programming language不清楚。你能简单解释一下这个问题吗?@AksenP它是JAVA。你可以用任何语言提供该语言。获得这三个子数组的条件是什么?它应该是
String[]array
Map<String, Integer> myCharMap = new HashMap<String, Integer>();
myCharMap.put(array[index], new Integer(myCharMap.get(array[index]).intValue()+1));
String data[] = { "0", "0", "0", "K", "K", "B", "P", "P", "P", "Z", "Z", "D", "D", "E", "E", "F", "N" };
// a = ['0','0','0','K','K','P','P','P','Z']

Stack<String> stack = new Stack<String>();
String prevValue = data[0];

for (int i = 1; i < data.length; i++) {
    if (data[i].equals(data[i - 1])) {
        prevValue = prevValue + data[i];
    } else {
        stack.push(prevValue);
        prevValue = data[i];
    }
}
stack.push(prevValue);
System.out.println(stack);