提取字符串的特殊内容
package sun.rain.amazing;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
/**
* 编写一个程序,提取字符串中的数字符号。
* 依靠string类的各种方法 来完成相应的要求
* @author sunRainAmazing
*
*/
public class GetNumberByStringMethod {
public static String STR = "abc123efg789hik007";
/**
* 采用charAt(int index) 方法
* 要知道数字 0-9对应的char的int类型的数据 为 48 -57
*/
@Test
public void getNumber_charAt(){
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < STR.length(); i++) {
char ch = STR.charAt(i);
if(48<=ch&&ch<=57){
sBuffer.append(ch);
}
}
System.out.println((char)9);
System.out.println(sBuffer.toString());
}
/**
* String substring(int beginIndex)
* 返回一个新的字符串,它是此字符串的一个子字符串。
*/
@Test
public void getNumber_substring(){
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i <STR.length(); i++) {
for (int j = 0; j < 10; j++) {
if((j+"").equals(STR.substring(i, i+1))){
sBuffer.append(STR.substring(i, i+1));
}
}
}
System.out.println(sBuffer.toString());
//System.out.println(Integer.parseInt("a"));
//java.lang.NumberFormatException: For input string: "a"
}
/**
* char[] toCharArray()
* 将此字符串转换为一个新的字符数组。
* 要知道数字 0-9对应的char的int类型的数据 为 48 -57
*/
@Test
public void getNumber_toCharArray(){
StringBuffer sBuffer = new StringBuffer();
char[] ch = STR.toCharArray();
for (int i = 0; i <ch.length; i++) {
if(48<=ch[i]&&ch[i]<=57){
sBuffer.append(ch[i]);
}
}
System.out.println(sBuffer.toString());
//System.out.println(Integer.parseInt("a"));
//java.lang.NumberFormatException: For input string: "a"
}
/**
* 采用正则表达式的形式
*/
@Test
public void getNumber_patterReg(){
StringBuffer sBuffer = new StringBuffer();
String regex = "\\d"; // \d 数字:[0-9]
//1、注册 匹配格式
Pattern pattern = Pattern.compile(regex);
//2、调用匹配 目标字符串
Matcher matcher = pattern.matcher(STR);
//进行依次查找相应的内容
while (matcher.find()) {
//System.out.println(matcher.group());
sBuffer.append(matcher.group());
}
System.out.println(sBuffer.toString());
}
/**
Pattern
public static Pattern compile(String regex)将给定的正则表达式编译到模式中。
参数:
regex - 要编译的表达式
抛出:
PatternSyntaxException - 如果表达式的语法无效
Matcher
public boolean matches()尝试将整个区域与模式匹配。
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
返回:
当且仅当整个区域序列匹配此匹配器的模式时才返回 true。
public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了
并且从那时开始匹配器没有被重置,则从以前匹配操作没有
匹配的第一个字符开始。
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
返回:
当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。
public String group()返回由以前匹配操作所匹配的输入子序列。
对于具有输入序列 s 的匹配器 m,表达式 m.group()
和 s.substring(m.start(), m.end()) 是等效的。
注意,某些模式(例如,a*)匹配空字符串。
当模式成功匹配输入中的空字符串时,此方法将返回空字符串。
指定者:接口 MatchResult 中的 group
返回:
以前匹配操作所匹配的字符串形式的子序列(可能为空)。
抛出:
IllegalStateException - 如果没有尝试任何匹配,
或者以前的匹配操作失败。
*/
}