我有一个字符串1122333344555566778888
我需要对其进行子串,因此得到[11, 22, 3333, 44, 5555, 66, 77, 8888]
是否可以以漂亮的方式进行,或者我需要对其进行硬编码并且八次使用string.substring(beginning, ending)
函数然后放入array
?
编辑:字符串不仅可以包含重复的数字。 AB CG HERD KJ 98HQ 0K 1E OOQW
它也是例子!
答案 0 :(得分:4)
使用模式:((\d)\2*)
String input = "1122333344555566778888";
Pattern p = Pattern.compile("((\\d)\\2*)");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println("Found " + m.group(1));
}
产生
11
22
3333
44
5555
66
77
8888
编辑:如果其数字以及空格和字母使用模式(([\d\w\s])\2*)
答案 1 :(得分:3)
您可以使用重复字符的正则表达式:
String input = "1122333344555566778888";
String regex = "(\\w)\\1+";
Matcher m = Pattern.compile(regex).matcher(input);
String[] substrings = new String[input.length()];
int index = 0;
while (m.find())
substrings[index++] = m.group();
for (int i = 0; i < index; i++)
System.out.println(substrings[i]);
<强>输出:强>
11
22
3333
44
5555
66
77
8888
重要提示:
substrings
数组包含空条目,因为它的长度等于输入字符串的长度。如果您的字符串包含非重复的连续字符,则此数组可能没有空条目。在substrings
上观看NullPointerException
。
答案 2 :(得分:0)
这个字符串中没有分隔符可以使用.split(),如果你想要有一个子字符串之间的分隔符,如11-22-3333- ...等,那将很容易使用
String[] splits = asseltClasses.split("-");
答案 3 :(得分:0)
基于BlueBullet的......
import java.util.regex.*;
import java.util.*;
public class MyTest {
public static void main(String[] args) {
String input = "1122333344555566778888";
String regex = "(\\w)\\1+";
Matcher m = Pattern.compile(regex).matcher(input);
List<String> l = new ArrayList<String>();
while (m.find()) l.add(m.group());
System.out.println(Arrays.toString(l.toArray()));
}
}
输出:
[11, 22, 3333, 44, 5555, 66, 77, 8888]
答案 4 :(得分:0)
这够漂亮吗?这只是一条线......
String parts = input.replaceAll("(.)(?!\\1)", "$1\0").split("\0");
这是一个测试:
public static void main(String[] args) {
String input = "1122333344555566778888";
String[] parts = input.replaceAll("(.)(?!\\1)", "$1\0").split("\0");
System.out.println(Arrays.toString(parts));
}
输出:
[11, 22, 3333, 44, 5555, 66, 77, 8888]
请注意,此解决方案存在一个非常小的障碍 - 调用$1
后replaceAll()
之后的字符不能在输入中出现。我选择空字符'\0'
(即十六进制零)为相当安全。
答案 5 :(得分:0)
这就是我要做的: 给定一个未排序的字符串“ABCABCABC”,您可以将其转换为Char []数组,然后使用Arrays.sort(),将其转换为AAABBBCCC。
public String[] sortThis(String inputData) {
String input = "ABCABCABC"; //make this whatever you want (or set to inputData)
String[] temp = new String[input.length()];
for (int i = 0; i < input.length();i++) //initialize the array, or it prints "null"
temp[i] = "";
int index = 0;
char[] info = input.toCharArray();
Arrays.sort(info);
for (int i = 0; i < input.length(); i++) { // fill the temp array
temp[index] += info[i];
if(i+1 < input.length())
if(i < input.length() && info[i] != info[i+1])
index++;
}
String[] answer = new String[index+1];
for(int i = 0; i < index+1; i++) // shorten the array
answer[i] = temp[i];
return answer;
}
<强>输出:强>
[AAA, BBB, CCC]
答案 6 :(得分:0)
也许你想用这个:
var str="1122333344555566778888"; //whatever
b=0;outpt="";
while(b<=18){
if(b==4|b==10|b==18){e=4;p=4}else{e=2;p=2}
outpt+=str.substr(b,e)+", ";b+=p;}
alert(outpt);
<强>输出:强>
11, 22, 3333, 44, 5555, 66, 77, 8888,