如何判断字符串中是否有数字? import java.util.*; 类Dis{ 静态布尔数字安装(字符串s){ 布尔结果=假; int i,j; char[]ch=s.toCharArray(); int x=通道长度; 对于(j=0;j

如何判断字符串中是否有数字? import java.util.*; 类Dis{ 静态布尔数字安装(字符串s){ 布尔结果=假; int i,j; char[]ch=s.toCharArray(); int x=通道长度; 对于(j=0;j,java,Java,您的代码失败,因为“3”不等于3。字符3(即ch[j])将永远不会等于实际整数,因为它们具有不同的类型。如果您希望这样做,则应将If条件替换为: import java.util.*; class Dis { static boolean Digitinstring(String s) { boolean result = false; int i, j; char[] ch = s.toCharArray(); int

您的代码失败,因为“3”不等于3。字符3(即ch[j])将永远不会等于实际整数,因为它们具有不同的类型。如果您希望这样做,则应将If条件替换为:

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));
    }
}
更简单的方法是简单地使用

Character.getNumericValue(ch[j]) == i;
您的整个方法如下所示:

Character.isDigit(s.charAt(j)); 
公共静态布尔数字安装(字符串s){

对于(int i=0;i您的代码失败,因为“3”不等于3。字符3,即ch[j]将永远不会等于实际整数,因为它们具有不同的类型。如果您希望这样做,您应该用以下内容替换If条件:

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));
    }
}
更简单的方法是简单地使用

Character.getNumericValue(ch[j]) == i;
您的整个方法如下所示:

Character.isDigit(s.charAt(j)); 
公共静态布尔数字安装(字符串s){

对于(inti=0;i有一些问题。首先是您的
else
块。请记住,在
if(){1}else{2}
的情况下,必须始终执行两个块中的一个,要么是
{1}
要么是
{2}

这意味着您的
结果将仅取决于最后一次测试,换句话说,取决于最后一个字符。
要解决此问题,请删除
else
块,仅当您的测试将找到数字时,才让
result
存储
true

第二个问题是,在
(ch[j]==i)
中,您正在比较
char
int
。因此,您的结果类似于
if('2'==2)
在Java中为false,因为
'2'
的int表示是its,它是50

因此,正如您所看到的,像
'2'==2
这样的条件与
50==2
相同,这是错误的


要生成包含数字的所有字符,您只需为(char digit='0';digit编写
,问题很少。首先是您的
else
块。请记住,在
if(){1}else{2}
的情况下,必须始终执行两个块中的一个,要么是
{1}
要么是
{2}

这意味着您的
结果将仅取决于最后一次测试,换句话说,取决于最后一个字符。
要解决此问题,请删除
else
块,仅当您的测试将找到数字时,才让
result
存储
true

第二个问题是,在
(ch[j]==i)
中,您正在比较
char
int
。因此,您的结果类似于
if('2'==2)
在Java中为false,因为
'2'
的int表示是its,它是50

因此,正如您所看到的,像
'2'==2
这样的条件与
50==2
相同,这是错误的


要生成包含数字的所有字符,您只需为(字符数字='0';数字写入
,您会遇到以下问题:

        if (Character.isDigit(ch)){
            System.out.println("True");
            return true;
        }
或者修改for循环

if (ch[j] == i+'0') {

for(i='0';i您有以下问题:

        if (Character.isDigit(ch)){
            System.out.println("True");
            return true;
        }
或者修改for循环

if (ch[j] == i+'0') {
for(i='0';i
/*注:48到57分别是0,1,2,…9的ascii值
代码变得更可读,现在不使用ascii值
*/
包装组件;
导入java.util.Scanner;
公共类Dis{
公共静态void main(字符串[]args){
System.out.println(“输入字符串”);
扫描器ob=新扫描器(System.in);
字符串s=ob.nextLine();
System.out.println(数字安装);
ob.close();
}
私有静态布尔数字安装(字符串s){
布尔结果=假;
对于(int j=0;j='0'和&s.charAt(j)
/*注意:48到57分别是0,1,2,…9的ascii值
代码变得更可读,现在不使用ascii值
*/
包装组件;
导入java.util.Scanner;
公共类Dis{
公共静态void main(字符串[]args){
System.out.println(“输入字符串”);
扫描器ob=新扫描器(System.in);
字符串s=ob.nextLine();
System.out.println(数字安装);
ob.close();
}
私有静态布尔数字安装(字符串s){
布尔结果=假;
对于(int j=0;j如果(s.charAt(j)>='0'&&s.charAt(j)您可以使用正则表达式来实现更紧凑的代码。正则表达式正好适合您的场景,即在字符串中查找特定模式。在数字安装中,您可以执行以下操作:

/* 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;
    }
}
如果字符串后面有任意数量的字符(.*)和数字(\\d)以及任意数量的字符(.*),则返回true。任意数量的字符都可以包含0


Swailem95的文章很好地解释了当前实现没有返回预期结果的原因。

您可以使用正则表达式来实现更紧凑的代码。正则表达式正好适合您的场景,即在字符串中查找特定模式。在数字安装中,您可以执行以下操作:

/* 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;
    }
}
如果字符串后面有任意数量的字符(.*)和数字(\\d)以及任意数量的字符(.*),则返回true。任意数量的字符都可以包含0

Swailem95的文章很好地解释了为什么您当前的实现没有返回预期结果

if(ch[j]==i)

请更正上面提到的条件,以比较相同的对象类型,您当前使用的是不同的类型,这是不正确的。或者使用Character类中的内置isDigit方法

if(ch[j]==i)


请更正上面提到的条件以比较相同的对象类型,您当前使用的不同类型永远不会为真。或者使用字符类中的内置isDigit方法。

删除
其他部分。
ch[j]