使用toCharArray检查String是否有任何非数字

时间:2017-04-02 09:08:53

标签: java

所以我是java的新手并试图为项目编写一些代码。我正在尝试使用toCharArray来检查String是否有任何非数字。这是我到目前为止编写的代码:

public void setMobile(String mobile) 
{
   boolean ok = true;
   char[] mob = mobile.toCharArray();
   for(int index = 0; Character.isDigit(mob) == true; index++)
   {

   }

   if(ok == true)
   {
       this.mobile = mobile;
   }
}

我正在尝试检查手机是否有任何信件,如果有,请不要将手机分配给此手机。

6 个答案:

答案 0 :(得分:4)

我假设您想学习基本java中的解决方案。 我的建议是检查每个字符,如果它是一个数字或不是这样的:

public void setMobile(String mobile) 
{
    boolean flag=true;
    for(int index=0;i<mobile.length();index++)
    {
        if(mobile.charAt(index) < '0' || mobile.charAt(index) > '9')
            flag=false;
    }
    if(flag==true)
        this.mobile=mobile;
}

更简单直观,无需额外的数据结构。

答案 1 :(得分:3)

您可以使用String#matches(String),其中参数是正则表达式\D matches any non-digit。像,

public void setMobile(String mobile) {
    if (!mobile.matches("\\D")) {
        this.mobile = mobile;
    }
}

如果你真的想用toCharArray()做这件事,你可以使用for-each循环和非数字的短路返回。像

public void setMobile(String mobile) {
    for (char ch : mobile.toCharArray()) {
        if (!Character.isDigit(ch)) {
            return;
        }
    }
    this.mobile = mobile;
}

,使用PatternMatcher;如果所有字符都是数字,则仅设置mobile。像,

public void setMobile(String mobile) {
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(mobile);
    if (m.matches()) {
        this.mobile = mobile;
    }
}

答案 2 :(得分:0)

虽然在我之前给出的一些答案是正确的,但我觉得他们只是在不解释你的错误的情况下给出了问题的答案。

请注意,您的代码存在的一个问题是您从未将ok变量设置为false,因此您将始终在if语句中输入。

另一个错误是你假设字符串中的唯一字符是数字或字母,因此检查Character.isDigit()会告诉你这是不是数字,但如果字符是反斜杠例如,Character.isDigit('\')将返回false,即使它不是字母。

检查某件事是否是一封信的正确方法是检查它是否在&#39; a&#39;之间。 &&#39; z&#39;或者&#39; A&#39;和&#39; Z&#39;。

一旦你理解了什么是错的,我会建议你在继续给出答案之前尝试改变你当前的代码,这样你才能理解如何以最简单的方式去做,而不是继续给出答案。

答案 3 :(得分:0)

尝试使用正则表达式// All bytes from an InputStream at once byte[] result = new ByteArrayInputStream(buf) .readAllBytes(); // Directly redirect an InputStream to an OutputStream new ByteArrayInputStream(buf) .transferTo(System.out); 匹配0到9之间的数字,\\d表示必须至少有1位数。

+

上面的代码使用三元运算符,但这也有效:

public void setMobile(String mobile) {
    this.mobile = (mobile.matches("\\d+")) ? mobile : this.mobile;
}

答案 4 :(得分:0)

除了其他答案之外,在Java 8中,接口public class WebClient extends WebViewClient { @Override @TargetApi(Build.VERSION_CODES.M) public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); final Uri uri = request.getUrl(); handleError(view, error.getErrorCode(), error.getDescription().toString(), uri); } @SuppressWarnings("deprecation") public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); final Uri uri = Uri.parse(failingUrl); handleError(view, errorCode, description, uri); } private void handleError(WebView view, int errorCode, String description, final Uri uri) { final String host = uri.getHost();// e.g. "google.com" final String scheme = uri.getScheme();// e.g. "https" // TODO: logic } } chars())实现了一个CharSequence方法,它返回String个代码点字符串中的字符。您可以在流上使用带有谓词的IntStream方法,以确保所有代码点都是数字,如下所示:

allMatch

此时public void setMobile(String mobile) { boolean ok = mobile.chars().allMatch(Character::isDigit); if (ok) { this.mobile = mobile; } } 变量并没有真正拉动它的重量,我们可以简单地将表达式替换为ok语句的条件。或者,如果你想要有点疯狂(虽然这可以说是进入代码 - 高尔夫领域),你可以用三元运算符将其重写为单行:

if

答案 5 :(得分:-2)

<强> 更新

$http.get("/user").then(function(response) {
    UserService.userData = response.data.userData,
});

说明: *表示从0到无限出现的任何字符,而不是\ d +(我认为双反斜杠只是为了逃避第二个反斜杠)而\ d +表示从1次到无限次的数字。