我正在上一个介绍编程类,所以我只允许使用字符串对象的方法。可能还有其他“更漂亮”的解决方法,但我不允许使用更先进的技术。假装我有一个字符串“abcdefghijklmnopqrstuvwxyz”我想将它分成相同长度的不同部分。我尝试的解决方案在下面不起作用。它只打印出一个部分,在这种情况下,“aaa”。我不确定哪种字符串方法最好。我认为子串是可行的方法但不确定如何正确实现它。
$scope.sum = $scope.op1 + $scope.opt2;
答案 0 :(得分:1)
我们假设您希望输出为字符串数组(您当前忽略输出;另一个选项是 print 它)。然后你可以实现像
这样的东西public static String[] split(String s, int splitSize) {
String[] result = new String[(s.length()+splitSize-1)/splitSize];
for (int i=0, j=0; i<s.length(); i+=splitSize) {
result[j++] = s.substring(i, Math.min(s.length(), i+splitSize));
}
return result;
}
这将返回一个数组,其中包含每个splitSize
个字符的连续子串,如果无法填充,则最后一个可能小于其余的字符串。如果需要将它们取出,则会出现{{ {3}}算法就是这样做的(尽管它更常用于绘制线条)
请注意"1".substring(0,3)
会抛出异常 - 您不应该尝试使用比可用的更大的子字符串。
使用Math.min
语句或三元运算符(if
)添加到结果时,可以避免使用?:
。
答案 1 :(得分:0)
试试这个(s.length()
必须是splitSize
)的倍数。
int splitSize = 5;
String s = "aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo";
for (int i = 0; i < s.length();) {
System.out.println(s.substring(i, i + splitSize));
i = i + splitSize;
}
答案 2 :(得分:0)
你应该使用&#34; count / flag&#34;密切关注字符串索引和拆分大小。看看这段代码
int splitSize = 5
String s = "aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo";
int count = 0;
String tempString = "";
for (int i = 0; i < s.length(); i++) {
String str_atIndex = Character.toString(s.charAt(i));
if(count < splitSize){
tempString = tempString + str_atIndex;
count++;
}else{
count = 0;
System.out.print(tempString);
tempString = "";
}
}
答案 3 :(得分:0)
在for循环中,您试图将String(s)除以整数(splitSize)。它会给你一个编译错误。
您可以尝试这样的事情:
static void split(int splitSize) {
String s = "aaaaabbbbbccccc";
for (int i = 0; i < s.length(); i += splitSize) {
System.out.println(s.substring(i, i+splitSize));
}
}
打印:
aaaaa
bbbbb
ccccc
如果这就是你要找的东西。希望有所帮助。
答案 4 :(得分:0)
另一种方法是使用String的charAt
方法。
int splitSize = 5;
String s = "aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo";
for (int i = 0; i < s.length(); i++) {
System.out.print(s.charAt(i));
if ((i + 1) % splitSize == 0) {
System.out.print("\n");
}
}
字符串中的每个字符都打印到控制台,当索引i
可以与splitSize
整除时,它会开始换行。