任务要求给定一个字符串,它应该打印出按长度排序的所有可能的子字符串。 例如,如果输入很有趣,则应打印
funny
funn
unny
fun
unn
nny
...
f
u
n
n
y
这是我的代码
public static void main( String[] args)
{
Scanner scan = new Scanner( System.in);
// constants
// variables
String input;
// program code
input = scan.nextLine();
for ( int i = 0; i < input.length(); i++ )
{
for ( int j = i + 1 ; j <= input.length(); j++ )
{
System.out.println( input.substring( i , j ) );
}
}
}
该程序打印出所有可能的子字符串,但不按长度排序。我找不到对子串进行排序的方法。我只能使用'do while'或'for'循环,不幸的是没有数组。
我对编程比较陌生,所以如果你能解释一下你的建议我真的很感激。感谢
答案 0 :(得分:1)
对于此示例,测试字符串将为abc
。
首次打印长度为3
abc
--- abc (0,3)
然后打印长度为2的部分:
abc
-- ab (0,2)
-- bc (1,3)
最后,打印部分长度为1,所以打印:
abc
- a (0,1)
- b (1,2)
- c (2,3)
这样,字符串按长度顺序打印
在伪代码中,这将是:
FOR length in size..1
FOR start in 0..(size-length)
print(substring(start, start+length)
在Java中,这将是:
public class Example {
public static void main(final String... args) {
String input = new Scanner(System.in).nextLine();
for (int length = input.length(); length > 0; length--) {
for (int start = 0; start <= (input.length()-length); start++) {
System.out.println(input.substring(start, start+length));
}
}
}
}
答案 1 :(得分:0)
诀窍是使用变量来表示长度和起始索引而不是起始和结束索引。
String input = "funny";
for (int length = input.length(); length > 0; --length)
for (int start = 0; start + length <= input.length(); ++start)
System.out.println(input.substring(start, start + length));
System.out.println("");
如果我们写length >= 0
,那么空字符串""
将被打印input.length()
次。但由于空字符串""
是每个字符串的子字符串,我们作弊并只用手打印一次。