Mam program gpa i działa on w metodzie equalsIgnoreCase()
, która porównuje dwa ciągi, literę "a" z danymi wejściowymi użytkownika, która sprawdza, czy wstawiono "a" czy nie. Ale teraz chcę dodać wyjątek z komunikatem o błędzie, który jest wykonywany, gdy numer jest wejściem. Chcę, aby program zdał sobie sprawę, że wejście integer nie jest tym samym, co ciąg znaków i wyświetla komunikat o błędzie. Które metody można użyć do porównania zmiennej typu String do wejścia typu int i wyrzucić wyjątek?Jak sprawdzić, czy ciąg jest numeryczny?
Odpowiedz
Wpisz poniżej metodzie
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
Jeśli chcesz użyć wyrażeń regularnych można użyć jako poniżej
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
Spróbuj - a złapanie ekwipunku ma tak ogromne obciążenie. – WorldSEnder
Kodowanie według wyjątku jest znanym wzorcem. Zobacz https://en.wikipedia.org/wiki/Coding_by_exception i https://softwareengineering.stackexchange.com/questions/189222/are-exceptions-as-control-flow-considered-a-serious-antipattern-if -to-why – mcalmeida
Wiele opcji zbadane na http://www.coderanch.com/t/405258/java/java/String-IsNumeric
Jeszcze jest
public boolean isNumeric(String s) {
return s != null && s.matches("[-+]?\\d*\\.?\\d+");
}
Może być przesadą, ale Apache Commons NumberUtils wydaje się również mieć pomocników.
Chciałbym zmienić ostatnie "+" na "*", aby "123" stało się ważnym wejściem (nic po separatorze dziesiętnym nie jest poprawnym wprowadzeniem) – peterh
Dodałbym czek na NULL ... inaczej będzie crash –
Oto jak sprawdzić, czy wejście zawiera cyfrę:
if (input.matches(".*\\d.*")) {
// there's a digit somewhere in the input string
}
hej, dzięki, pomogło to, ale program m nadal kończy się po wyrzuceniu wyjątku. jeśli wyjmę wyjątek, działa idealnie ... dokładnie tak, jak prosiłem, nawet jeśli jest tam numer. każdy pomysł na to, jak nadal działać prgm po wykryciu wyjątku – user1944277
Owiń kod wyrzucając wartość ex-dur w try-catch, wychwytując wyjątek zgłoszony. – Bohemian
Próbowałem już po prostu owijając całą moją część kodu, która monituje dane wejściowe w próbie catch, ale to nie zadziałało, czy możesz wyjaśnić, używając mojego opublikowanego kodu powyżej – user1944277
Jeśli wolno używać bibliotek innych firm sugerują, co następuje.
NumberUtils.isDigits(str:String):boolean
NumberUtils.isNumber(str:String):boolean
Nie potrzebujesz niczego od strony trzeciej: loop: if (Character.isDigit (c)) –
Uwaga! isNumeric i isDigits zajmują się tylko czystymi liczbami. to znaczy, że zwrócą fałsz na 7,574. (liczby oddzielone przecinkami). –
isNumber (str: String) jest przestarzałe –
użyć tej
public static boolean isNum(String strNum) {
boolean ret = true;
try {
Double.parseDouble(strNum);
}catch (NumberFormatException e) {
ret = false;
}
return ret;
}
spróbuj przechwycić inne wyjątki również :) jeśli wysłałeś ciąg znaków obiektu "Null", to nie powiedzie się – prime
public static boolean isNumeric(String string) {
if (string == null || string.isEmpty()) {
return false;
}
int i = 0;
int stringLength = string.length();
if (string.charAt(0) == '-') {
if (stringLength > 1) {
i++;
} else {
return false;
}
}
if (!Character.isDigit(string.charAt(i))
|| !Character.isDigit(string.charAt(stringLength - 1))) {
return false;
}
i++;
stringLength--;
if (i >= stringLength) {
return true;
}
for (; i < stringLength; i++) {
if (!Character.isDigit(string.charAt(i))
&& string.charAt(i) != '.') {
return false;
}
}
return true;
}
Można również użyć Apache Commons StringUtils.isNumeric - http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isNumeric(java.lang.String)
dlaczego głosowanie w dół? – Rudi
Nie oddałem Ci głosu, ale nie musisz dodawać więcej oprogramowania. W języku Java SE: loop: if (Character.isDigit (c)) –
Uwaga! isNumeric zajmuje się tylko czystymi liczbami. tj. zwróci wartość false dla 7,574. (liczby oddzielone przecinkami). –
aby sprawdzić, czy wszystko int znaków, można po prostu użyć podwójne negatywne. if (! SearchString.matches ("[^ 0-9] + $")) ...
[^ 0-9] + $ sprawdza, czy są jakieś znaki, które nie są liczbą całkowitą, więc test kończy się niepowodzeniem, jeśli to prawda. Po prostu NIE i osiągasz sukces w kwestii sukcesu.
Możesz użyć metody Character.isDigit (char ch) lub możesz również użyć wyrażenia regularnego.
Poniżej znajduje się fragment:
public class CheckDigit {
private static Scanner input;
public static void main(String[] args) {
System.out.print("Enter a String:");
input = new Scanner(System.in);
String str = input.nextLine();
if (CheckString(str)) {
System.out.println(str + " is numeric");
} else {
System.out.println(str +" is not numeric");
}
}
public static boolean CheckString(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c))
return false;
}
return true;
}
}
pisałem ten mały sposób wreszcie w moim programie, więc mogę sprawdzić, czy ciąg jest numeryczne lub przynajmniej każdy znak jest liczbą.
private boolean isNumber(String text){
if(text != null || !text.equals("")) {
char[] characters = text.toCharArray();
for (int i = 0; i < text.length(); i++) {
if (characters[i] < 48 || characters[i] > 57)
return false;
}
}
return true;
}
Prosta metoda.
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public boolean isOnlyNumber(String value) {
boolean ret = false;
if (!isBlank(value)) {
ret = value.matches("^[0-9]+$");
}
return ret;
}
- 1. Jak sprawdzić, czy ciąg znaków jest xml?
- 2. Sprawdzanie, czy ciąg znaków jest numeryczny w rzutce
- 3. porządek numeryczny ciąg tablicy w php
- 4. Jak sprawdzić ciąg, jeśli jest to ASCII, czy nie?
- 5. Python: Jak sprawdzić, czy ciąg jest prawidłowym IRI?
- 6. Jak sprawdzić, czy ciąg znaków jest jsonem w modelu Railsowym
- 7. Ruby: Jak sprawdzić, czy ciąg znaków jest prawidłowym czasem?
- 8. Jak sprawdzić, czy ciąg znaków jest unikalnym identyfikatorem?
- 9. Jak sprawdzić, czy ciąg znaków jest pusty w eliksiru
- 10. Jak mogę sprawdzić, czy wartość w ciąg jest adresem IP
- 11. Jak sprawdzić, czy ciąg znaków jest pusty w Emacs Lisp?
- 12. Jak sprawdzić, czy ciąg znaków jest prawidłową zmienną języka Java?
- 13. Jak sprawdzić, czy ciąg znaków nie jest pusty?
- 14. Jak mogę sprawdzić, czy ciąg zawiera tylko litery?
- 15. Jak sprawdzić, czy dynamiczny jest pusty.
- 16. Jak sprawdzić, czy jest konsola?
- 17. sprawdzić, czy ciąg w kolumnie dataframe pandy jest na liście
- 18. Sposób Java, aby sprawdzić, czy ciąg jest palindromem
- 19. Aby sprawdzić, czy ciąg zawiera określone słowo
- 20. sprawdzić, czy ciąg zawiera numer większy niż
- 21. Jak mogę sprawdzić zmienną C# jest pusty ciąg "" lub null?
- 22. Jak sprawdzić, czy ciąg ma wartość zerową w python?
- 23. jak sprawdzić ciąg SharedPreferences jest pusty lub zerowy * android
- 24. bash: jak sprawdzić, czy ciąg zaczyna się od "#"?
- 25. W języku C#, jak sprawdzić, czy ciąg zawiera liczbę całkowitą?
- 26. Jak sprawdzić, czy ciąg kończy się określonym podciąganiem?
- 27. Jak sprawdzić, czy ciąg zawiera tylko znaki alfanumeryczne i myślniki?
- 28. Jak sprawdzić, czy ciąg znaków zawiera listę znaków?
- 29. Jak sprawdzić, czy ciąg znaków ma określony wzorzec?
- 30. Jak mogę sprawdzić, czy ciąg zawiera chiński w Swift?
'Pattern.compile ("[0-9] +") zapałki (string)', może? –
Więc chcesz dopasować * tylko * liczby całkowite lub dowolną liczbę? – arshajii
Nie chcę, żeby wprowadzano w ogóle liczby, tylko ciąg – user1944277