将字符串拆分为相等长度的子字符串

时间:2016-03-01 04:16:04

标签: java string substring

我正在上一个介绍编程类,所以我只允许使用字符串对象的方法。可能还有其他“更漂亮”的解决方法,但我不允许使用更先进的技术。假装我有一个字符串“abcdefghijklmnopqrstuvwxyz”我想将它分成相同长度的不同部分。我尝试的解决方案在下面不起作用。它只打印出一个部分,在这种情况下,“aaa”。我不确定哪种字符串方法最好。我认为子串是可行的方法但不确定如何正确实现它。

$scope.sum = $scope.op1 + $scope.opt2;

5 个答案:

答案 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整除时,它会开始换行。