2013-10-08 2 views
0

Im пытается напечатать только первые 5 символов данной строки в одной строке. Моя проблема в том, что вся строка не печатается. Часть конца обрезается.Печать только первых 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 

Однако последние части строки не печатается.

+0

Что '' j' и k' ..? – user2339071

+0

Вам нужно учитывать тот факт, что в конце вы можете не иметь ровно 5 символов ... – MadProgrammer

ответ

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 
+0

отредактирован для лучшего формата, ваш ответ хорошо работает, поэтому +1 upvote – SpringLearner

+0

Это похоже на очень крутое решение - есть намного более простые подходы, IMO. Нет необходимости обрабатывать его по одному персонажу за раз. –

+0

Да, вы прямо под ним тоже лучше, я думаю \t String str = «Привет, мир, мое имя - это то, что вы хотите»; \t \t для (int i = 0, j = 0; i 5) \t \t \t {J = I + 5;} \t \t \t \t еще \t \t {J = str.length();} \t \t \t System.out.println (str.substring (I, J)); \t \t \t i + = 5; \t \t} –

0

Ваши переменные повсюду. У вас есть i, j, k, l, m; некоторые из которых не определены в коде, который вы представляете.

Но у вас должен быть только один: начало подстроки, скажем i. Конец подстроки всегда еще 5: (i + 5). Затем увеличьте его на 5 каждый цикл.

1

Однако последние части строки не печатаются.

Да, это правильно - из-за вашего состояния цикла. Вы повторяете (string.length()/5) раз - округляется. Поэтому, если строка содержит 12 символов, вы будете повторять только два раза ... оставляя последние две буквы.

Я хотел бы предложить решение это немного по-другому - избавиться от l и m переменных (которые я предполагаю, что вы хотели использовать в вашем substring вызова - вы никогда не объявлять j или 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); 
} 
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); 
     } 

    } 
+0

Зачем идти рекурсивно? Я не вижу причин для этого, и это сложнее, чем цикл IMO. –

Смежные вопросы