![](/img/trans.png)
[英]Java Error java.lang.StringIndexOutOfBoundsException: String index out of range: 0
[英]java.lang.StringIndexOutOfBoundsException: String index out of range Error - Morse to English Java Code
我正在將莫爾斯電碼轉換為英語java代碼(如下),其中| 摩爾斯(Morse)中的空格代表字母和數字之間的空格,摩爾斯(Morse)中的空格代表2個字母或數字之間的空格。 例如,“成為” =“---- | -...”。 在莫爾斯。
// Import Scanner.
import java.util.Scanner;
public class Project1_szhu1249322
{
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
System.out.println("Would you like to translate 'Morse Code' to English, or 'English' to Morse code? (Enter 'Morse Code' or 'English'.)");
String unit1 = input.nextLine();
System.out.println("Enter a string of " + unit1 + " characters (for English, numbers and letters, only): ");
String amountUnit1 = input.nextLine();
if (unit1.equals("Morse Code"))
toEnglish(amountUnit1);
else if (unit1.equals("English"))
toMorseCode(amountUnit1);
else
System.out.println("Invalid data. Enter 'Morse Code' or 'English' without the single quotes.");
}
public static void toMorseCode(String english)
{
// Declare variables, arrays, and strings.
int i = 0;
int l = english.length();
int i2 = 2 * i;
String[] lowerAlphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] upperAlphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] morseCode = {".-", "-...", "-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
morseCode[i] = lowerAlphabet[i];
StringBuilder morseBuilder = new StringBuilder();
// for loops and if statements for result.
for (i = 0; i < l; i++)
{
i2 = 2 * i;
if (english.charAt(i) != ' ')
morseBuilder.append(morseCode[i2]);
else
morseBuilder.append('|');
if (morseBuilder.charAt(i - 1) != ' ' && morseBuilder.charAt(i + 1) != 0)
morseBuilder.append(' ');
}
morseCode[i] = upperAlphabet[i];
// for loops and if statements for result.
for (i = 0; i < l; i++)
{
i2 = 2 * i;
if (english.charAt(i) != ' ')
morseBuilder.append(morseCode[i2]);
else
morseBuilder.append('|');
if (morseBuilder.charAt(i - 1) != ' ' && morseBuilder.charAt(i + 1) != 0)
morseBuilder.append(' ');
}
// Display results.
System.out.println("The corresponding Morse code is " + morseBuilder + ".");
}
public static void toEnglish(String morse)
{
// Declare variables, arrays, and strings.
int i = 0;
int l = morse.length();
int i2 = i / 2;
String[] lowerAlphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] upperAlphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] morseCode = {".-", "-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
morseCode[i] = upperAlphabet[i];
String english;
StringBuilder englishBuilder = new StringBuilder();
// for loops and if statements for result.
for (i = 0; i < l; i++)
{
i2 = i / 2;
if (morse.charAt(i) == '|')
{
englishBuilder.append(' ');
}
else
englishBuilder.append(morseCode[i2]);
}
morseCode[i] = lowerAlphabet[i];
// for loops and if statements for result.
for (i = 0; i < l; i++)
{
i2 = i / 2;
if (morse.charAt(i) == '|')
{
englishBuilder.append(' ');
}
else
englishBuilder.append(morseCode[i2]);
}
// Display results.
System.out.println("The corresponding English is " + englishBuilder + ".");
}
}
我收到此錯誤:
Would you like to translate 'Morse Code' to English, or 'English' to Morse code? (Enter 'Morse Code' or 'English'.)
English
Enter a string of English characters (for English, numbers and letters, only):
to be
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:237)
at java.lang.StringBuilder.charAt(StringBuilder.java:76)
at Project1_szhu1249322.toMorseCode(Project1_szhu1249322.java:42)
at Project1_szhu1249322.main(Project1_szhu1249322.java:16)
我不明白為什么它會給我這個錯誤信息。
另外( 問題2 ),我應該使用什么i2值? i / 2僅適用於我(當第一個字符不是空格時。幫助????
當i==0
時,您在morseBuilder.charAt(i - 1)
上失敗
您的代碼有多個風險點。 當此代碼charAt(i - 1)
i=0
時,您將獲得異常。 此外,在功能toEnglish
完成循環之后,你將有值的i
將等於l
,使得下一行morseCode[i] = lowerAlphabet[i];
如果您的morse
字符串的長度>
morseCode
的長度或lowerAlphabet
將導致異常
使用地圖將字母“ A”,“ B”等映射到它們的莫爾斯電碼櫃台,反之亦然,將莫爾斯電碼轉換為英語。 這使您知道在兩者之間進行轉換時要使用的內容。 嘗試以下操作並對其進行修改以適合您的需求。
public static void main(String[] args) throws IOException
{
String userInput = "Hello World";
String converted = ConvertEnglishToMorseCode(userInput);
System.out.println(userInput + " in Morse Code is " + converted);
System.out.println(converted + " in English is " + ConvertMorseCodeToEnglish(converted));
} //end main
public static String ConvertMorseCodeToEnglish(String input)
{
String[] upperAlphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] morseCode = {".-", "-...", "-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
HashMap<String, String> morseToEnlgish = new HashMap<>();
for(int i = 0; i < upperAlphabet.length; i++)
morseToEnlgish.put(morseCode[i], upperAlphabet[i]);
String morseToEnglish = "";
String[] morseSplit = input.split(" ");
for(int i = 0; i < morseSplit.length; i++)
{
morseToEnglish += morseToEnlgish.containsKey(morseSplit[i]) ? morseToEnlgish.get(morseSplit[i]) : " ";
}
return morseToEnglish;
}
public static String ConvertEnglishToMorseCode(String input)
{
String[] upperAlphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
String[] morseCode = {".-", "-...", "-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
HashMap<String, String> englishToMorse = new HashMap<>();
for(int i = 0; i < upperAlphabet.length; i++)
englishToMorse.put(upperAlphabet[i], morseCode[i]);
String[] letters = input.toUpperCase().split("");
String englishToMorseWord = "";
for(int i = 0; i < letters.length; i++)
{
englishToMorseWord += englishToMorse.containsKey(letters[i]) ? englishToMorse.get(letters[i]) : "|";
if(i < letters.length - 1)
englishToMorseWord += " ";
}
return englishToMorseWord;
}
產量
Hello World in Morse Code is .... . .-.. .-.. --- | .-- --- .-. .-.. -..
.... . .-.. .-.. --- | .-- --- .-. .-.. -.. in English is HELLO WORLD
請注意,兩者之間的轉換略有不同。 對於英語,我們在“”周圍進行拆分,以單獨獲取每個字符並使用映射。 為了將莫爾斯電碼轉換為英語,我們在“”周圍進行了拆分,因為我假設在將英語單詞轉換為莫爾斯電碼時,給您的摩爾斯電碼字母是您輸出的格式,以空格分隔。 最后,每當我們從英語到摩爾斯電碼並且沒有映射時,我們都填寫“ |” 從摩爾斯電碼轉換為英文時會顯示“”。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.