java学习笔记
如何在Java中判断一个字符串是否只包含数字?
本 文 目 录
许多人在编程过程中都会遇到这样的需求:判断一个字符串是否只包含了数字。在网上搜索相关教程时可能会发现不少看似可行的方法,但实际操作起来却存在各种问题。本文将介绍几种常用的解决方案,并分析其优缺点。
第一种方法是利用Java内置的Character.isDigit函数。
以下是一段示例代码:
public static boolean isNumericZidai(String str) {
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
然而,这段代码并不能处理负数,例如"-19162431.1254"会被判断为假。
第二种方法是使用正则表达式。
下面是一段使用正则表达式的代码:
public static boolean isNumericzidai(String str) {
Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]+");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
虽然网上称这种方式可以匹配任何数字,但实际上它存在漏洞,无法正确处理像"-19162431a1254"这样的字符串。
正确的正则表达式应该是-?[0-9]+\\.?[0-9]*
。但是,当我们尝试使用此表达式去匹配很长的数字时,例如"9162431.1254",会被转换成科学计数法形式,如-1.91624311254E7,这就会导致问题出现。
针对这种情况,我们可以使用Java中的BigDecimal类。
如下所示:
public static boolean isNumeric(String str) {
String bigStr;
try {
bigStr = new BigDecimal(str).toString();
} catch (Exception e) {
return false;
}
return true;
}
这种方法可以在输入包含中文或者非常长的数字的情况下,仍然能够正确工作。但是如果要处理小数点的情况,还需要做额外的处理。
为了应对这些问题,我们可以结合正则表达式和BigDecimal,实现更加强大的判断功能:
/**
* 匹配是否为数字
* @param str 可能为中文,也可能是-19162431.1254,不使用BigDecimal的话,变成-1.91624311254E7
*/
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class jj9 {
public static boolean isNumeric(String str) {
String bigStr;
try {
bigStr = new BigDecimal(str).toString();
} catch (Exception e) {
return false;
}
Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?");
Matcher isNum = pattern.matcher(bigStr);
if (!isNum.matches()) {
return false;
}
return true;
}
public static void main(String[] args) {
String gary = "-566255123.330009";
boolean isNumeric = isNumeric(gary);
System.out.println("Is numeric: " + isNumeric);
}
}
此外,Apache Commons Lang库中提供了StringUtils.isNumeric函数,它可以用来检查一个字符串是否仅包含Unicode数字。但是经过测试,它也无法正确处理负数。总的来说,建议使用修正后的正则表达式和BigDecimal类来解决问题。(本文以山鬼谣me为首发,相关内容为学习后的笔记,如有侵权请告知。)
- 上一篇
java根据时间戳生成文件夹
**标题:Java根据时间戳生成文件夹****一、具体的作用以及主要运用的方法**在实际应用中,我们经常需要通过时间戳来生成文件夹,以便于对文件进行归类和存储。这样做的好处在于能够直观地了解文件夹的创建时间,方便后续的查找和管理。主要运用的方法包括获取时间戳、格式化时间戳以及创建文件夹等操作。**二、实现功能的每个步骤**1. 获取当前时间戳2. 格式化时间戳为可读的日期时间字符串3. 根据格式化
- 下一篇
在Java中从一个类中调用另一个类的普通、static、public、protected方法
在面向对象编程中, 类与类之间的交互是非常常见的。有时候我们需要在其中一个类中调用另一个类的成员方法,这可能包括普通方法、静态方法、公有方法或是受保护的方法。接下来,我们将介绍如何在Java中完成这些操作。## 1. 理解调用不同类型的方法- **普通方法**:普通方法属于某个类的成员方法,只能通过该类的对象来调用。想要调用普通方法,首先必须先创建被调用类的对象。- **静态方法**:静态方法属于