Я в настоящее время находится в процессе создания программы, которая получает от пользователя суффикс («ing», «er» и т. Д.), А затем прикрепляет этот суффикс к списку слов из входного файла. Проблема в том, что я использую буферизованный читатель, чтобы получить суффикс, который пользователь хочет использовать, но я все время получаю сообщение об ошибке (Исключение в потоке «main» java.io.IOException: Stream closed) при компиляции. Ниже вы заметите, что я не закрываю буферизованный читатель нигде, потому что когда я получаю сообщение об ошибке (Где его закрыть?), Я просто хочу принять вход пользователя и установить его как строковую переменную, которая будет использоваться внутри класс. Какие-либо предложения??Java/Eclipse - разрешение IOException при использовании BufferedReader вне основного метода
public static String GetSuffix (String psSingular1) throws IOException {
//Use BufferedReader to get suffix
BufferedReader brGetSuffix = new BufferedReader(new InputStreamReader(System.in));
//Prompt the user for a suffix
System.out.println("Please insert a suffix that you would like add to the words (ex. er, ing, ance,etc.)");
//Set a string to the user entered suffix
String sUserSuffix = brGetSuffix.readLine();
//Initialize sSuffix
String sSuffix = "";
//Each string represents the last characters of the word from the input file
String sLast1 = psSingular1.toLowerCase().substring(psSingular1.length()-1, psSingular1.length());
String s2ndLast = psSingular1.toLowerCase().substring(psSingular1.length()-2, psSingular1.length()-1);
//This string represents the last letter of the word
String sLastLetter = psSingular1.toLowerCase().substring(psSingular1.length()-1, psSingular1.length());
//This string represents a double vowel. It will be used in a word like "keep"
String sDoubleVowel = psSingular1.toLowerCase().substring(psSingular1.length()-3, psSingular1.length()-1);
//This String will represent the first character of the users suffix which will be needed to determine how the suffix is added to the word
String s1stSuffix = sUserSuffix.toLowerCase().substring(0, 0);
//If the word ends in 2 vowels and a consonant the suffix is added
if (bIsVowel(sDoubleVowel) && !bIsVowel(sLast1)){
sSuffix = psSingular1 + sUserSuffix;
}
//Checks if psSingular1 ends in a consonant and y, changes the y to i and adds a suffix.
else if (sLast1.equals("y") && !bIsVowel(s2ndLast)){
//Drop the "y" add "ies"
sSuffix = psSingular1.substring(0, psSingular1.length()-1) + "i" + sUserSuffix;
}
//Checks if psSingular1 ends in a vowel and y
else if (sLast1.equals("y") && bIsVowel(s2ndLast)){
sSuffix = psSingular1 + sUserSuffix;
}
//Checks if psSingular1 ends in e and if the suffix starts with a vowel
else if (sLast1.equals("e") && bIsVowel(s1stSuffix)){
sSuffix = psSingular1.substring(0, psSingular1.length()) + sUserSuffix;
}
//Checks if psSingular1 ends in e and if the suffix starts with a consonant
else if (sLast1.equals("e") && !bIsVowel(s1stSuffix)){
sSuffix = psSingular1 + sUserSuffix;
}
//Checks if the word ends in two consonants
else if (!bIsVowel(s2ndLast) && !bIsVowel(sLast1)){
sSuffix = psSingular1 + sUserSuffix;
}
//If the the word ends in a vowel and a consonant the last letter is doubled and the suffix is added
else if (bIsVowel(s1stSuffix) && bIsVowel(s2ndLast) && !bIsVowel(sLast1)){
sSuffix = psSingular1 + sLastLetter + sUserSuffix;
}
//Add the suffix
else {
sSuffix = psSingular1 + sUserSuffix;
}
return sSuffix;
}
Не могли бы вы просто попробовать: 'BufferedReader brGetSuffix = new BufferedReader (новый InputStreamReader (новый CloseShieldInputStream (System.in)));' и сообщите нам, если он все еще не работает? – ccjmne
@ccjmne Скопируйте и вставьте именно то, что у вас есть, и я получаю сообщение об ошибке в CloseShieldInputStream. Является ли это частью класса, который может понадобиться импортировать? – NDFB76
К сожалению ... вы правы ... это из 'org.apache.commons.io.input'. На самом деле, возможно, вы могли бы просто использовать «Сканер сканер = новый сканер (System.in);' then 'String sUserSuffix = scanner.nextLine();'. Если вы просто получаете несколько символов с пользовательского ввода, вам может не понадобиться использовать BufferedReader. Я знаю, что он не отвечает на ваш вопрос, но, возможно, по крайней мере, вы могли бы продолжить :) – ccjmne