2016-01-31 5 views
0

Я разрабатываю приложение, в котором я должен взять строку строк и номер прерывания. Я совершенно новичок в этом, поэтому я запутался в логике того, как цитировать и «ломать» строку. Я также сталкиваюсь с ошибкой во время выполнения моего класса runner «Индекс String вне диапазона: 0 (в java.lang.String)», поскольку он выделяет последнюю строку моего кода (периметр по периметру).Приложение для разрыва строки

Пример входа будет:

ч е л л о б о г л г

Пример вывода будет

HEL

низкий

УНР

л.д.

Мой код до сих пор

 import java.util.Scanner; 

public class LineBreaker 
{ 
    private String line; 
    private int breaker; 

    public LineBreaker() 
    { 
    this("",0); 
    } 

    public LineBreaker(String s, int b) 
    { 
     s = ""; 
     b = 0; 
    } 

    public void setLineBreaker(String s, int b) 
    { 
     line = s; 
     breaker = b; 
    } 

    public String getLineBreaker(String s, int b) 
    { 
     String box = ""; 
     for(int i = 0; i < s.length() - 1; i++) 
     { 
      if(i == s.charAt(b)) 
      { 
       System.out.println(); 
      } 
     } 
     return box; 
    } 
} 

И мой бегун класс:

import java.util.Scanner; 

public class LineBreakerRunner 
{ 
    public static void main(String args[]) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     String choice = ""; 
     do{ 
      System.out.println("Enter a group of characters please."); 
      String characters = keyboard.nextLine(); 
      System.out.println("Enter an integer please."); 
      int number = keyboard.nextInt(); 
      LineBreaker test = new LineBreaker(); 
      test.getLineBreaker(characters,number); 
      System.out.println("Do you want to enter more data?(Y/N)"); 
      choice = keyboard.nextLine(); 
     }while(choice.charAt(0) == 'Y'||choice.charAt(0) == 'y'); 
    } 
} 

Любая помощь будет высоко ценится, спасибо за ваше время!

+0

Использование 'substring' в' Строка ', а также цикл' for'. Кроме того, где переменные 's' и' b' в вашем классе? Похоже, вы не совсем понимаете конструкторов. –

ответ

1

Проблема заключается в вашем if-statement if(i == s.charAt(b)) Выполнение этой операции будет выполняться только в том случае, если значение ASCII текущей буквы равно индексу.

Печать напрямую

Если вы хотите распечатать непосредственно из метода, ваш полный метод будет выглядеть следующим образом:

public void getLineBreaker(String s, int b) 
{ 
    for(int x=0; x<s.length(); x++){ 
     System.out.print(s.charAt(x)); 
     if((x+1)%b == 0)    //print a newline every n characters (where n is b) 
      System.out.println(); 
    } 
} 

Возвращение строки

Если вы хотите, чтобы создать строку и верните его в конце, вы можете сделать это следующим образом:

public String getLineBreaker(String s, int b) 
{ 
    String str = ""; 
    for(int x=0; x<s.length(); x++){ 
     str += s.charAt(x); 
     if((x+1)%b == 0)  
       str += "\n"; 
    } 
    return str; 
} 

Строительство строки с StringBuilder

И для лучшей производительности, вы можете также использовать StringBuilder:

public static String getLineBreaker(String s, int b) 
{ 
    StringBuilder str = new StringBuilder(); 
    for(int x=0; x<s.length(); x++){ 
     str.append(s.charAt(x)); 
     if((x+1)%b == 0)  
       str.append("\n"); 
    } 
    return str.toString(); 
} 

Испытано Выход:

hel 
loW 
orl 
d 
Смежные вопросы