我正在设计一个应用程序,我应该采用一行字符串和一个中断号码。我对此很新,所以我对如何循环和“打破”字符串的逻辑感到困惑。我也在我的运行程序类“字符串索引超出范围:0(在java.lang.String中)”中遇到运行时错误,因为它突出显示了我的代码的最后一行(while while)。
输入示例为:
h l l o w o r l d
3
输出示例
HEL
低
窝
LD
到目前为止,我的代码是
0 1 2 3 4 5 6 7 8 9 A B
|a|a| | |b|b|b|b|c|d| | |
| | | |
我的跑步者:
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;
}
}
非常感谢任何帮助,感谢您的时间!
答案 0 :(得分:1)
问题在于你的if语句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();
}
}
如果您只想创建一个String并最终将其返回,您可以这样做:
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:
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