在java中,如何检查给定字符串S中有多少长度为n的子字符串?

时间:2018-03-06 14:36:18

标签: java substring

我正在编写一个程序,我必须比较给定字符串's'中包含的所有可能的大小'k'的子字符串,然后以字典方式对它们进行排序,因此较小的子字符串是第一个,而较大的子字符串是最后的。

示例:s = "serendipia" k = 3 应该导致["ser", "ere", "ren", "end","ndi", "dip", "ipi", "pia" ]

我给's'(字符串)和'k'(子字符串的大小),这是我最初提出的:

for (int i = 0; i < s.length(); i++){
        substringsArray[i] = s.substring(i,i+k); 
        //System.out.format("%s %d %d%n",substringsArray[i], i, s.length());
    }

认为这可以用于最坏的情况'k' == 1,并且我的数组中的字母数量与s.length()-1一样多。它确实有效但我得到一个明显的例外:IndexOutOfBoundsException

我也尝试使用ArrayList insted一个数组,所以我得到一个动态大小列表,但同样的问题又出现了:我怎么知道有多少次我必须迭代字符串而不超出界限?

所以我想知道,有没有一种方法/算法可以帮助我弄清楚 - 给出's'和'k' - 我的数组的正确大小?

1 个答案:

答案 0 :(得分:2)

试试这个:

// make sure you don't go beyond the String's length
for (int i = 0; (i+k) <= s.length(); i++){    
    substringsArray[i] = s.substring(i,i+k);
}

DEMO