import java.util.*;
class Dis {
static boolean Digitinstring(String s) {
boolean result = false;
int i, j;
char[] ch = s.toCharArray();
int x = ch.length;
for (j = 0; j < x; j++) {
for (i = 0; i <= 9; i++) {
if (ch[j] == i) {
System.out.println("True");
result = true;
} else {
result = false;
}
}
}
return result;
}
public static void main(String args[]) {
System.out.println("Enter the string");
Scanner ob = new Scanner(System.in);
String s = ob.nextLine();
System.out.println(Digitinstring(s));
}
}
此代码始终给出答案false
。 if条件不起作用。
我该怎么做才能使它正常工作?
答案 0 :(得分:4)
您的代码失败,因为'3'不等于3.字符3,即您的ch [j]将永远不会等于实际的整数,因为它们具有不同的类型。如果你想要这个,你应该用这个替换你的if条件:
Character.getNumericValue(ch[j]) == i;
更简单的方法是简单地使用
Character.isDigit(s.charAt(j));
你的整个方法看起来像这样:
public static boolean digitInString(String s){
for(int i = 0; i<s.length(); i++){
if(Character.isDigit(s.charAt(i))){
return true;
}
}
return false;
}
答案 1 :(得分:2)
您可以使用正则表达式来获得更紧凑的代码。正则表达式适用于您的场景,它正在寻找字符串中的特定模式。在您的Digitinstring中,您可以执行以下操作:
return s.matches(".*\\d.*");
如果您的字符串具有任意数量的字符(。*),后跟数字(\\ d)后跟任意数量的字符(。*),则返回true。任意数量的字符都可以包含0。
Swailem95的帖子很好地解释了为什么你当前的实现没有返回预期的结果。
答案 2 :(得分:1)
几乎没有问题。首先是你的else
块。请记住,如果if(){1}else{2}
必须始终执行两个块中的一个,则可以是{1}
或{2}
。
这意味着您的result
仅取决于最后一次测试,换言之,仅取决于最后一个字符
要解决此问题,请移除else
阻止,只有当您的测试找到数字时才允许result
存储true
。
第二个问题是,在(ch[j] == i)
您要比较char
和int
。所以你最终会得到像什么这样的东西
if ('2' == 2)
在Java中为false,因为'2'
的int表示是index in Unicode Table,即50。
因此,当您看到'2'==2
之类的条件与50==2
相同时,这是错误的。
要生成包含数字的所有字符,您只需在此代码中编写for (char digit = '0'; digit<='9'; digit++)
:
static boolean DigitInString(String s) {
for (char ch : s.toCharArray()) {
for (char digit = '0'; ch <= '9'; ch++) {
if (ch == digit) {
System.out.println("True");
return true;
}
}
}
return false;
}
您还可以提高代码的可读性并替换此嵌套循环
for (char digit = '0'; ch <= '9'; ch++) {
if (ch == digit) {
System.out.println("True");
return true;
}
}
带
if (Character.isDigit(ch)){
System.out.println("True");
return true;
}
此方法将检查字符是否在Unidoce Table中为数字字符指定的范围内。
答案 3 :(得分:1)
/* Note: 48 to 57 is ascii values of 0,1, 2,...9 respectively
code is made more readable ascii values are not used now
*/
package com;
import java.util.Scanner;
public class Dis {
public static void main(String[] args) {
System.out.println("Enter the string");
Scanner ob = new Scanner(System.in);
String s = ob.nextLine();
System.out.println(Digitinstring(s));
ob.close();
}
private static boolean Digitinstring(String s) {
boolean result = false;
for (int j = 0; j < s.length(); j++) {
if(s.charAt(j)>='0' && s.charAt(j)<='9')
{
result=true;
break;
}
}
return result;
}
}
答案 4 :(得分:0)
您遇到问题:
for (i = 0; i <= 9; i++) {
if (ch[j] == i) {
System.out.println("True");
result = true;
} else {
result = false;
}
}
ch [j]是一个字符,我是一个数字,所以字符'0'的数字值为46(如果我没记错的话),所以你可以通过在i中添加'0'来纠正这种情况。如果声明
if (ch[j] == i+'0') {
或修改for循环
for (i = '0'; i <= '9'; i++) {
请注意,在这种情况下,0是一个字符。
答案 5 :(得分:0)
if(ch [j] == i)
请更正上述条件以比较相同对象类型,您目前使用的是不同类型,这是永远不会发生的。或者使用Character Class中的内置isDigit方法。