仅在一行中打印字符串的前5个字符

时间:2013-10-08 06:10:40

标签: java string substring

我试图在一行中只打印给定字符串的前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 个答案:

答案 0 :(得分:1)

  

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

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

我建议略微区别地解决这个问题 - 摆脱lm变量(我假设您打算在substring调用中使用 - 您永远不会声明{{1} }或j)并使用k循环中的变量。您需要确保不要尝试在字符串末尾使用for - substring对此非常方便:

Math.min

答案 1 :(得分: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

答案 2 :(得分:0)

你的变量到处都是。您有ijklm;其中一些未在您提供的代码中定义。

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

答案 3 :(得分: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);
        }

    }