所以我是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;
}
}
我正在尝试检查手机是否有任何信件,如果有,请不要将手机分配给此手机。
答案 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;
}
或,使用Pattern
和Matcher
;如果所有字符都是数字,则仅设置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次到无限次的数字。