一、判断一个字符串是否都为数字
(1)java类提供的方法
package com.gec.lalala;
public class DigitTest {
public static void main(String[] args) {
String strNum = "yellow1red2green3-lalala88lololo66";
boolean numbers = isDigit(strNum);
System.out.println(numbers);
}
// 判断一个字符串是否都为数字
private static boolean isDigit(String strNum) {
if (strNum != null && !"".equals(strNum)) {
for (int i = 0; i < strNum.length(); i++) {
// ASCALL码中48-57代表0-9
if (!(strNum.charAt(i) >= 48) || !(strNum.charAt(i) <= 57)) {
return false;// 只要有一个不是0-9就返回false
}
}
}
return true;
}
}
(2)用正则表达式
package com.gec.lalala;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DigitTest {
public static void main(String[] args) {
String strNum = "yellow1red2green3-lalala88lololo66";
boolean numbers = isDigit1(strNum);
System.out.println(numbers);
}
// 判断一个字符串是否都为数字
private static boolean isDigit1(String strNum) {
return strNum.matches("[0-9]+");
}
// 判断一个字符串是否都为数字
private static boolean isDigit2(String strNum) {
Pattern pattern = Pattern.compile("[0-9]+");
Matcher matcher = pattern.matcher(strNum);
return matcher.matches();
}
}
二、提取字符串中的数字
(1)java类提供的方法
package com.gec.lalala;
public class DigitTest {
public static void main(String[] args) {
String strNum = "yellow1red2green3-lalala88lololo66";
String numbers = getDigit(strNum);
System.out.println(numbers);
}
// String 类提供截取数字的方法
private static String getDigit(String strNum) {
String result = "";
if (strNum != null && !"".equals(strNum)) {
for (int i = 0; i < strNum.length(); i++) {
if (strNum.charAt(i) >= 48 && strNum.charAt(i) <= 57) {
result = result + strNum.charAt(i) + ",";
}
}
}
//-------------字符串截取的几种方法--------------
// StringBuffer buffer = new StringBuffer(result);
// (1)buffer = buffer.deleteCharAt(buffer.length()-1);
// (2)buffer = buffer.replace(buffer.length()-1, buffer.length(),"");
// //return buffer.toString();
// (3)result = buffer.substring(0, result.length() - 1);这个返回的结果是String类型
result = result.substring(0, result.length() - 1);// 去掉最后一个逗号
return result;
}
}
(2)用正则表达式
package com.gec.lalala;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DigitTest {
public static void main(String[] args) {
String strNum = "yellow1red2green3-lalala88lololo66";
String numbers = getNumbers(strNum);
System.out.println(numbers);
}
// 截取数字
private static String getNumbers(String content) {
Pattern pattern = Pattern.compile("\\d+");// Pattern.compile("\\D+");//
// 截取非数字
Matcher matcher = pattern.matcher(content);
String result = "";
while (matcher.find()) {
result = result + matcher.group(0) + ",";
}
result = result.replaceAll("\\,$", "");// 去掉最后一个逗号
return result;
}
}
三、我思故我在
在最后出现了点问题:matcher.group(0) 是什么意思?0 和 1 的区别是什么?为什么换成 matcher.group(1) 后得出的结果是相同的?
解析:正则表达式matcher.group用法
首先学习几个重要的概念
- 子表达式
在正则匹配模式中,使用一对括号括起来的内容是一个子表式
- 捕获
在正则匹配模式中,子表达式匹配到的内容会被系统捕获至系统的缓冲区中
- 反向引用(后向引用)
捕获之后,可以在匹配模式中,使用\n (n:数字)来引用系统的第n号缓冲区内容
下面两个概念先不管,认识了子表达式,group方法就好理解了。group(…)是针对子表达式来说的,其中的数字是代表子表达式的索引,group(0)就是指的整个表达式,group(1) 指的是第一个子表达式里的东西,group(2)指的第二个子表达式里的东西。
代码示例:
package com.gec.lalala;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DigitTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "Hello,World! la!la!la!";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println("Group_0: " + matcher.group(0));// 得到第0组——整个匹配
System.out.println("Group_1:" + matcher.group(1));// 得到第一组匹配——与(or)匹配的
System.out.println("Group_2:" + matcher.group(2));// 得到第二组匹配——与(ld!)匹配的,组也就是子表达式
System.out.println("Start_0:" + matcher.start(0) + " End 0:" + matcher.end(0));// 总匹配的索引
System.out.println("Start_1:" + matcher.start(1) + " End 1:" + matcher.end(1));// 第一组匹配的索引
System.out.println("Start_2:" + matcher.start(2) + " End 2:" + matcher.end(2));// 第二组匹配的索引
System.out.println(str.substring(matcher.start(0), matcher.end(1)));// 从总匹配开始索引到第1组匹配的结束索引之间子串——Wor
System.out.println(str.substring(matcher.start(0), matcher.end(2)));// 从总匹配开始索引到第2组匹配的结束索引之间子串——World!
}
}
}
运行结果:
Group_0: World!
Group_1: or
Group_2: ld!
Start_0: 6 End 0:12
Start_1: 7 End 1:9
Start_2: 9 End 2:12
Wor
World!
最后感谢以下文章提供的学习帮助
https://www.iteye.com/blog/winter8-1463244
https://blog.csdn.net/ethan_10/article/details/80509767