Java: как разбить строку на несколько символов?
Я попытался выполнить поиск в Интернете, чтобы решить этот вопрос, но ничего не нашел.
Я написал следующий абстрактный код, чтобы объяснить, что я прошу:
String text = "how are you?";
String[] textArray= text.splitByNumber(4); //this method is what I'm asking
textArray[0]; //it contains "how "
textArray[1]; //it contains "are "
textArray[2]; //it contains "you?"
Метод splitByNumber разбивает строку "текст" каждые 4 символа. Как я могу создать этот метод?
Большое спасибо
Ответы
Ответ 1
Я думаю, что он хочет, чтобы строка была разделена на подстроки размером 4. Тогда я сделал бы это в цикле:
List<String> strings = new ArrayList<String>();
int index = 0;
while (index < text.length()) {
strings.add(text.substring(index, Math.min(index + 4,text.length())));
index += 4;
}
Ответ 2
Использование Guava:
Iterable<String> result = Splitter.fixedLength(4).split("how are you?");
String[] parts = Iterables.toArray(result, String.class);
Ответ 3
Как насчет регулярного выражения?
public static String[] splitByNumber(String str, int size) {
return (size<1 || str==null) ? null : str.split("(?<=\\G.{"+size+"})");
}
См. Разделить строку на подстроки равной длины в Java
Ответ 4
Попробуйте это
String text = "how are you?";
String array[] = text.split(" ");
Или вы можете использовать его ниже
List<String> list= new ArrayList<String>();
int index = 0;
while (index<text.length()) {
list.add(text.substring(index, Math.min(index+4,text.length()));
index=index+4;
}
Ответ 5
Quick Hack
private String[] splitByNumber(String s, int size) {
if(s == null || size <= 0)
return null;
int chunks = s.length() / size + ((s.length() % size > 0) ? 1 : 0);
String[] arr = new String[chunks];
for(int i = 0, j = 0, l = s.length(); i < l; i += size, j++)
arr[j] = s.substring(i, Math.min(l, i + size));
return arr;
}
Ответ 6
Использование простых java-примитивов и циклов.
private static String[] splitByNumber(String text, int number) {
int inLength = text.length();
int arLength = inLength / number;
int left=inLength%number;
if(left>0){++arLength;}
String ar[] = new String[arLength];
String tempText=text;
for (int x = 0; x < arLength; ++x) {
if(tempText.length()>number){
ar[x]=tempText.substring(0, number);
tempText=tempText.substring(number);
}else{
ar[x]=tempText;
}
}
return ar;
}
Использование: String ar[]=splitByNumber("nalaka", 2);
Ответ 7
Я не думаю, что есть готовое решение, но я бы сделал что-то вроде этого:
private String[] splitByNumber(String s, int chunkSize){
int chunkCount = (s.length() / chunkSize) + (s.length() % chunkSize == 0 ? 0 : 1);
String[] returnVal = new String[chunkCount];
for(int i=0;i<chunkCount;i++){
returnVal[i] = s.substring(i*chunkSize, Math.min((i+1)*chunkSize-1, s.length());
}
return returnVal;
}
Использование:
String[] textArray = splitByNumber(text, 4);
EDIT: подстрока фактически не должна превосходить длину строки.
Ответ 8
Это самое простое решение, которое я мог бы придумать. Попробуйте это
public static String[] splitString(String str) {
if(str == null) return null;
List<String> list = new ArrayList<String>();
for(int i=0;i < str.length();i=i+4){
int endindex = Math.min(i+4,str.length());
list.add(str.substring(i, endindex));
}
return list.toArray(new String[list.size()]);
}