0

我试图在一行中只打印给定字符串的前 5 个字符。我的问题是没有打印整个字符串。结尾的一部分被切断了。

  int l = 0;
      int m = 5;
      for(int i = 0; i < (string.length()/5) ; i++)
      {
            System.out.println(string.substring(j,k));
            l = m;
            m = m + 5;

      }

鉴于string = "Hello world, my name is something which you want to" 结果将类似于:

Hello
 worl
d, my

但是,没有打印字符串的最后部分。

4

4 回答 4

1

但是,没有打印字符串的最后部分。

是的,没错 - 因为你的循环条件。您正在迭代(string.length()/5)时间-向下舍入。因此,如果字符串有 12 个字符,您将只迭代两次……省略最后两个字母。

我建议稍微不同地解决这个问题——去掉landm变量(我假设你打算在你的substring调用中使用它——你从不声明jor )并在循环k中使用变量。for您需要确保不要尝试substring在字符串末尾使用 -Math.min这很方便:

for (int sectionStart = 0; sectionStart < string.length(); sectionStart += 5) {
    int sectionEnd = Math.min(string.length(), sectionStart + 5);
    System.out.println(string.substring(sectionStart, sectionEnd);
}
于 2013-10-08T06:18:26.853 回答
1

从你的问题我理解的是,你需要像这样的输出

Hello

 worl

d, my 

name 

is so

String str="Hello world, my name is something which you want to";
    for(int i=0;i<str.length();i++)
    {
        if(i%5==0 && i!=0)
        {
            System.out.println("");
        }
        System.out.print(str.charAt(i));


    }

添加另一种方法

String str="Hello world, my name is something which you want to";
    for(int i=0,j=0;i<str.length();)
    {
        if(j<str.length() && (str.length()-j)>5)
        {j=i+5;}
        else
        {j=str.length();}
        System.out.println(str.substring(i,j));
        i+=5;
    }

输出:

Hello

 worl

d, my

 name

 is s

ometh

ing w

hich 

you w

ant t

o
于 2013-10-08T06:31:57.100 回答
0

你的变量无处不在。你有i, j, k, l, m; 其中一些未在您提供的代码中定义。

但是你应该只有一个:子字符串的开头,比如i. 子字符串的结尾总是多 5 个:(i + 5). 然后每次循环将其增加 5。

于 2013-10-08T06:16:01.957 回答
0

简单递归方法

void test(String t){

        if(t.length() > 4){
        String o = t.substring(0,5);
        System.out.println(o);
        String x = t.substring(5,t.length());
        test(x);
        }
        else{
            System.out.println(t);
        }

    }
于 2013-10-08T06:27:22.930 回答