基本上我有一项任务要求我编写一个名为stutter
的方法。 stutter方法应该接受一个输入String并返回每个字符重复的字符串。例如,如果输入字符串是" help"那么运行这个方法的结果应该是" hheellpp"。我已经尝试了很多不同的东西,无法让它发挥作用。这是我的代码:
import java.util.*;
public class Stutter {
static String stutterString = "";
public static String stutter ( String s ) {
char ch = s.charAt (0);
String tempString = String.valueOf ( ch );
if ( s.length() == 0 ) {
return stutterString;
} else {
stutterString += tempString + tempString;
return stutter ( s.substring (1) );
}
}
public static void main ( String [] args ) {
Scanner inputScanner = new Scanner ( System.in );
System.out.println ( "What word would you like to stutter?" );
String userInput = inputScanner.next();
inputScanner.close();
System.out.println ( stutter ( userInput ) );
}
}
我收到一个错误,我不知道该怎么做。这是错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Stutter.stutter(Stutter.java:12)
at Stutter.stutter(Stutter.java:23)
at Stutter.main(Stutter.java:41)
任何帮助将不胜感激。这不是一个庞大的计划。如您所见,我已经发布了我正在使用的整个Stutter课程。它只是在烦我,因为我确定有一个简单的解决办法,但我没有看到它。
答案 0 :(得分:2)
您需要更改此行
char ch = s.charAt (0);
到
char ch = s.length() > 0 ? s.charAt(0) : ' ';
您的代码将按预期工作。
更好更清晰的解决方案是:
if (s.length() == 0) {
return stutterString;
} else {
char ch = s.charAt(0);
String tempString = String.valueOf(ch);
stutterString += tempString + tempString;
return stutter(s.substring (1));
}
你想用什么词来口吃?
>> ABCDEFG
>> aabbccddeeffgg
说明:
当s.charAt(0)
为空字符串时,尝试s
时会发生什么?您未验证s
是否为空,添加简单检查s.length() > 0
就是您所缺少的。
提示:始终使用调试器,它可以帮助您,您在使用它时更好地了解程序的流程。另外,在编写递归时,使用铅笔和纸来绘制调用将有助于您理解它。
答案 1 :(得分:2)
我是这样做的:
我的基本情况是当字符串的长度小于1时,在这种情况下它将返回“”。
否则会打印两次字符串的第一个字符,然后再次调用stutter方法。
我将原始字符串作为参数传入,除了我已从中删除了第一个字符。这样,原始字符串的第二个字符将在下一次打印出两次,字符串变短。
import java.util.*;
public class Stutter {
public static String stutter ( String s ) {
if(s.length() < 1) return "";
else{
return "" + s.charAt(0) + s.charAt(0) + stutter(s.substring(1,s.length()));
}
}
public static void main ( String [] args ) {
Scanner s = new Scanner ( System.in );
System.out.println ( "What word would you like to stutter?" );
String userInput = s.nextLine();
System.out.println(stutter(userInput));
}
}
答案 2 :(得分:1)
提示:如果s.length()
为零,则s.charAt(0)
将抛出异常...因为您正在尝试获取超出零长度字符串末尾的字符。
答案 3 :(得分:1)
在s
之前检查s.charAt (0)
变量的长度。例如,移动
char ch = s.charAt (0);
String tempString = String.valueOf ( ch );
to else block
答案 4 :(得分:1)
这个怎么样:
public class Stutter {
private static String head(String str) {
return str.substring(0,1);
}
private static String tail(String str) {
return str.substring(1);
}
private static String stutter(String str) {
if (str.length() > 0)
return head(str)+head(str)+stutter(tail(str));
else
return "";
}
public static void main(String args[]) throws Exception {
if (args.length > 0) {
System.out.println(stutter(args[0]));
}
}
}
答案 5 :(得分:-1)
public class Stutter {
public static void main (String args[]) {
String TEST_STRING = "abcdefg";
System.out.println(stutter(TEST_STRING));
}
private static String stutter(String s) {
return s.replaceAll("(.)", "$1$1");
}
}
答案 6 :(得分:-2)
Editted。
import java.util.*;
public class Stutter {
static String stutterString = "";
public static String stutter ( String s ) {
if(s.length() > 0)
{
return stutterString.concat(s.substring(0,1)).concat(s.substring(0,1)).concat(stutter(s.substring(1)));
}
else
{
return stutterString;
}
}
public static void main ( String [] args ) {
Scanner inputScanner = new Scanner ( System.in );
System.out.println ( "What word would you like to stutter?" );
String userInput = inputScanner.next();
inputScanner.close();
System.out.println ( stutter ( userInput ) );
}
}