Несколько более чистое решение, чем принятый ответ (на основе этот вопрос ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Я решил поместить его в вспомогательный класс как статическую утилиту. Пример использования:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
В этом ответе показано, как получить приложение из Play Маркета, если приложение отсутствует, хотя следует проявлять осторожность на устройствах, которые не есть Play Store.
Причина, по которой вы получаете две записи после обработки символа, заключается в том, что вы не полностью прочитали строку, содержащую символ.
В частности, вы используете keyboard.nextInt();
в верхней ветви и keyboard.next();
в нижней ветви. Хотя они читают следующее целое число и символ, соответственно, они не обрабатывают маркер конца строки.
Затем, когда вы достигаете вершины цикла, вы вызываете keyboard.nextLine()
, который обрабатывает любые символы, встречающиеся после int (или символа в случае удаления всех), до конца маркера строки. С ожидаемым пользовательским вводом это просто пустая строка.
Чтобы это исправить, вам нужно убедиться, что вы читаете все keyboard.nextLine()
в тех случаях, когда вы читаете только целые числа или один символ.
Что происходит, то условие для вас, когда цикл равен
while (!command.equalsIgnoreCase("quit"))
, что по-английски означает, что, если команда не равна «выход», запустите этот цикл.
Внутри цикла команда никогда не устанавливается на «выход». Например, если я задаю входную строку как «abcde» и прошу удалить «c» в позиции 1. Затем ваша логика устанавливает здесь команду «удалить»
command = keyboard.nextLine();
, а затем выводит окончательное значение как «abde» , Теперь, когда цикл заканчивается, команда все еще «удаляет» и, следовательно, цикл выполняется снова.
Возможное решение - явно спросить пользователя, хочет ли он повторить попытку, используя цикл do while. Также просто совет, я вижу, что вы использовали nextInt. Желательно использовать nextLine сразу после следующего int. посмотрите на это по следующей причине: Java Scanner не ожидает ввода данных пользователем
, это то, что вы кодировали бы, если бы вы явно приняли согласие пользователя, если вы хотите выполнить больше команд:
public static void main (String[] args) throws java.lang.Exception
{
Scanner keyboard = new Scanner(System.in);
// Output Variables
String userInput = "";
// Variables
String removeChar = "", removeAllChar = "";
int removeIndex = 0;
// First Output
System.out.println("Enter the string to be manipulated");
userInput = keyboard.nextLine();
String command = "";
String retry = "";
// While loop
do {
// Output
System.out.println("Enter your command (reverse, replace first, replace last, remove all, remove)");
command = keyboard.nextLine();
if (command.equalsIgnoreCase("remove")) {
System.out.println("Enter the character to remove");
removeChar = keyboard.nextLine();
int totalCount = 0;
for (int j = 0; j < userInput.length(); j++) {
if (userInput.charAt(j) == removeChar.charAt(0)) {
totalCount = totalCount + 1;
}
}
System.out.println("Enter the " + removeChar
+ " you would like to remove (Not the index - 1 = 1st, 2 = 2nd, etc.):");
removeIndex = keyboard.nextInt();
keyboard.nextLine();
int currentIndex = 1;
if (removeIndex <= totalCount) {
for (int i = 0; i < userInput.length(); i++) {
if (userInput.charAt(i) == removeChar.charAt(0)) {
if (currentIndex == removeIndex) {
String firstpartOfString = userInput.substring(0, i);
String secondpartOfString = userInput.substring(i + 1, userInput.length());
System.out.println("The new sentence is " + firstpartOfString + secondpartOfString);
userInput = firstpartOfString + secondpartOfString;
break;
} else {
currentIndex = currentIndex + 1;
}
}
}
} else {
System.out.println("Can't find " + removeChar + " occuring at " + removeIndex + " int the string.");
}
// Remove All Code
} else if (command.equalsIgnoreCase("remove all")) {
System.out.println("Enter the character to remove");
removeAllChar = keyboard.next();
String newString = "";
for (int i = 0; i < userInput.length(); i++) {
if (userInput.charAt(i) != removeAllChar.charAt(0)) {
newString = newString + userInput.charAt(i);
}
}
userInput = newString;
System.out.println("The new sentence is " + userInput);
}
System.out.println("Do you want to go again?");
retry = keyboard.nextLine();
// Bracket for while loop
}while("yes".equalsIgnoreCase(retry));
}