每当我尝试执行此代码时,每当我输入一个单字的单词时它会返回一个错误,虽然编译很好并且用任何其他单词做一个多于一个字母的短语\
我很困惑为什么会这样,因为一切都应该返回正常,但每当代码通过一个字母的单词时,它会自动停止程序并结束它
import javax.swing.*;
// The "PigTrans" class.
public class PigTrans
{
public static void main (String[] args)
{
String userInput;
userInput = JOptionPane.showInputDialog (null, "Please enter a word");
System.out.println (PigTrans.pigTranslator (userInput));
} // main method
public static String pigTranslator (String word)
{
int[] anArray;
String phrase = "";
String[] words = word.split ("\\s+");
String[] newWord = new String [words.length];
for (int i = 0 ; i < words.length ; i++)
{
char number;
number = words [i].charAt (0);
int ascii;
ascii = (int) number;
if (word.length () <= 1)
{
if ((ascii >= 48) && (ascii <= 57))
{
newWord [i] = words [i];
phrase = phrase + newWord [i] + " ";
}
else
{
newWord [i] = words [i];
phrase = phrase + newWord [i] + " ";
}
}
else if ((ascii >= 65) && (ascii <= 90)) //Checks if the word begins with a capital
{
char word2;
word2 = words [i].charAt (0);
if (startsWithQU (words [i]) == true)
{
newWord [i] = words [i].substring (2);
newWord [i] = newWord [i] + "quay";
}
else if (checkAscii (word2) == true)
{
newWord [i] = words [i] + "way";
}
else
{
String letter = "";
letter = words [i].substring (0, 1);
newWord [i] = words [i].substring (1);
newWord [i] = newWord [i] + letter + "ay";
}
String firstLetter, restOfWord, FirstLetter2;
firstLetter = newWord [i].substring (0, 1);
restOfWord = newWord [i].substring (1);
restOfWord = restOfWord.toLowerCase ();
firstLetter = firstLetter.toUpperCase ();
newWord [i] = firstLetter.concat (restOfWord);
phrase = phrase + newWord [i] + " ";
}
else
{
char word2;
word2 = words [i].charAt (0);
if (startsWithQU (words [i]) == true)
{
newWord [i] = words [i].substring (2);
newWord [i] = newWord [i] + "quay";
}
else if (checkAscii (word2) == true)
{
newWord [i] = words [i] + "way";
}
else
{
String letter = "";
letter = words [i].substring (0, 1);
newWord [i] = words [i].substring (1);
newWord [i] = newWord [i] + letter + "ay";
}
phrase = phrase + newWord [i] + " ";
}
}
return phrase;
} //pigTranslator
public static boolean checkAscii (char letter)
{
boolean correct = false; //Declares the boolean variable as false
int ascii;
ascii = (int) letter;
if ((ascii == 65) || (ascii == 69) || (ascii == 73) || (ascii == 79) || (ascii == 85) || (ascii == 97) || (ascii == 101) || (ascii == 105) || (ascii == 111) || (ascii == 117))
{
correct = true;
}
return correct;
} // PigMethods class
public static boolean startsWithQU (String word)
{
boolean checkQU = false; //Declares variables needed to check for "qu." Program takes two letters from the word and check if it starts with "qu."
String QUcheck;
QUcheck = word.substring (0, 2);
if (QUcheck.equalsIgnoreCase ("qu")) //When the word starts with "qu, return of boolean value becomes true."
{
checkQU = true;
}
return checkQU; //If return value is not true, the varuiable returns the value of checkQU.
} //startsWithQU
} // PigTrans class
答案 0 :(得分:0)
问题在于:
number = words [i].charAt (0);
当你放一个字母然后放一个空格时,split
方法创建一个2元素数组 - 第一个元素是字母,第二个元素是空字符串。所以charAt(0)显然会为空字符串抛出一个错误!
在将字符串提供给trim
方法之前,解决方案是split
字符串。
另外,在行中:
if (word.length () <= 1)
条件应该是== 1
,因为你不能对0长度的字符串做任何事情。