我有一个编程访谈,他们让我写一个方法,它接受一个长字符串和一个int作为参数,并且该方法应该在数字的每个间隔分割字符串。我无法理解如何做到这一点,所以我想我会问这里是否有任何想法。
顺便说一句:不幸的是我没有得到这份工作......答案 0 :(得分:5)
很抱歉听到采访。它糟透了......它发生了。 +1跟进问题。
在splitter函数中,我使用索引运行“long string”。每次迭代我都使用String.substring方法从字符串中提取区间大小。 (索引+间隔)。提取后,我用间隔递增索引。因此,逐个间隔地移动长串。
可能会发生索引+间隔大于长字符串的长度。 (将导致超出限制的行为)因此额外检查以避免它,并保存剩余的字符串。
public static void main(String[] args) {
String veryLongString = "12345678901234567890";
List<String> subStrings = splitter(veryLongString, 3);
// Print the result
for (String s : subStrings) {
System.out.print(s + " ");
}
}
public static List<String> splitter(String string, int interval) {
int index = 0;
List<String> subStrings = new ArrayList<String>();
while (index < string.length()) {
// Check if there is still enough characters to read.
// If that is the case, remove it from the string.
if (index + interval < string.length()) {
subStrings.add(string.substring(index, index + interval));
} else {
// Else, less the "interval" amount of characters left,
// Read the remaining characters.
subStrings.add(string.substring(index, string.length()));
}
index += interval;
}
return subStrings;
}
输出:
123 456 789 012 345 678 90
答案 1 :(得分:1)
抱歉不幸。下次好运。我想用递归来回答这个问题。它使算法更简单。
这是我遵循的原则
以下是代码:
import java.util.ArrayList;
import java.util.List;
public class StringHelper {
private static List<String> workList = new ArrayList<String>();
private StringHelper()
{
}
public static void intervallSplit(String datas, int interval) {
if (datas.length() <= interval) {
workList.add(datas);
return;
}
workList.add( datas.substring(0,interval));
intervallSplit(datas.substring(interval), interval);
}
public static void main(String[] args) {
String text = "1234567891011121314151617181920";
intervallSplit(text, 3);
System.out.println(workList);
}
}
以下是带有示例数据的示例的输出
[123,456,789,101,112,131,415,161,718,192,0]