android java 字符串正则表达式 分离特殊字符串
Java中正则表达式的使用
在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串、或者对字符串进行分割、或者对字符串一些字符进行替换/删除,一般会通过if-else、for 的配合使用来实现这些功能 。如下所示:
- public class Test{
- public static void main(String args[]) {
- String str="@Shang Hai Hong Qiao Fei Ji Chang";
- boolean rs = false;
- for(int i=0;i<str.length();i++){
- char z=str.charAt(i);
- if('a' == z || 'F' == z) {
- rs = true;
- break;
- }else{
- rs= false;
- }
- }
- System.out.println(rs);
- }
- }
这种方法使用简单直观,但是 难以解决复杂的工作,而且代码量也会增加很多,不利于维护。
这时,我们可以使用正则表达式来实现这些功能,而且代码简单易维护。下面就来介绍了Java中对字符串的正则表达式的几个常用的功能,具体情况如下所示(其中用到了java.util.regex包):
1.Java中在某个字符串中查询某个字符或者某个子字串
- String s = "@Shang Hai Hong Qiao Fei Ji Chang";
- String regEx = "a|F"; //表示a或F
- Pattern pat = Pattern.compile(regEx);
- Matcher mat = pat.matcher(s);
- boolean rs = mat.find();
如果s中有regEx,那么rs为true,否则为flase。
如果想在查找时忽略大小写,则可以写成Pattern pat=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
2.在某个文件中获取一段字符串
- String regEx = ".+\(.+)$";
- String s = "c:\test.txt";
- Pattern pat = Pattern.compile(regEx);
- Matcher mat = pat.matcher(s);
- boolean rs = mat.find();
- for(int i=1;i<=mat.groupCount();i++){
- System.out.println(mat.group(i));
- }
以上的执行结果为test.txt,提取的字符串储存在mat.group(i)中,其中i最大值为mat.groupCount();
3.对字符串的分割
- String regEx=":";
- Pattern pat = Pattern.compile(regEx);
- String[] rs = pat.split("aa:bb:cc");
执行后,r就是{"aa","bb","cc"}
如果用正则表达式分割就如上所示,一般我们都会使用下面更简单的方法:
- String s = "aa:bb:cc";
- String[] rs=s.split(":");
4.字符串的替换/删除
- String regEx="@+"; //表示一个或多个@
- Pattern pat=Pattern.compile(regEx);
- Matcher mat=pat.matcher("@@aa@b cc@@");
- String s=mat.replaceAll("#");
结果为"##aa#b cc##"
如果要把字符串中的@都给删除,只用要空字符串替换就可以了:
- String s=mat.replaceAll("");
结果为"aab cc"
注:对Pattern类的说明: 下面的语句将创建一个Pattern对象并赋值给句柄pat:Pattern pat = Pattern.compile(regEx);
当然,我们可以声明Pattern类的句柄,如Pattern pat = null; 2.pat.matcher(str)表示以用Pattern去生成一个字符串str的匹配器,它的返回值是一个Matcher类的引用。 |
正则表达式以过滤特殊字符:

- // 过滤特殊字符
- public static String StringFilter(String str) throws PatternSyntaxException {
- // 只允许字母和数字
- // String regEx = "[^a-zA-Z0-9]";
- // 清除掉所有特殊字符
- String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
- Pattern p = Pattern.compile(regEx);
- Matcher m = p.matcher(str);
- return m.replaceAll("").trim();
- }
- @Test
- public void testStringFilter() throws PatternSyntaxException {
- String str = "*adCVs*34_a _09_b5*[/435^*&城池()^$$&*).{}+.|.)%%*(*.中国}34{45[]12.fd'*&999下面是中文的字符¥……{}【】。,;’“‘”?";
- System.out.println(str);
- System.out.println(StringFilter(str));
- }
抛开空泛的概念,下面写出几个简单的Java正则用例:
◆比如,在字符串包含验证时
//查找以Java开头,任意结尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人");
boolean b= matcher.matches();
//当条件满足时,将返回true,否则返回false
System.out.println(b);
◆以多条件分割字符串时
Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
◆文字替换(首次出现字符)
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));
◆文字替换(全部)
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));
◆文字替换(置换字符)
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
◆验证是否为邮箱地址
String str="ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
◆去除html标记
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
String string = matcher.replaceAll("");
System.out.println(string);
◆查找html中对应条件字符串
Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
if(matcher.find())
System.out.println(matcher.group(1));
}
◆截取http://地址
//截取url
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
buffer.append(matcher.group());
buffer.append("\r\n");
System.out.println(buffer.toString());
}
◆替换指定{}中文字
String str = "Java目前的发展史是由{0}年-{1}年";
String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[] object) {
String temp=sourceString;
for(int i=0;i<object.length;i++){
String[] result=(String[])object[i];
Pattern pattern = Pattern.compile(result[0]);
Matcher matcher = pattern.matcher(temp);
temp=matcher.replaceAll(result[1]);
}
return temp;
}
◆以正则条件查询指定目录下文件
//用于缓存文件列表
private ArrayList files = new ArrayList();
//用于承载文件路径
private String _path;
//用于承载未合并的正则公式
private String _regexp;
class MyFileFilter implements FileFilter {
/**
* 匹配文件名称
*/
public boolean accept(File file) {
try {
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return match.matches();
} catch (Exception e) {
return true;
}
}
}
/**
* 解析输入流
* @param inputs
*/
FilesAnalyze (String path,String regexp){
getFileName(path,regexp);
}
/**
* 分析文件名并加入files
* @param input
*/
private void getFileName(String path,String regexp) {
//目录
_path=path;
_regexp=regexp;
File directory = new File(_path);
File[] filesFile = directory.listFiles(new MyFileFilter());
if (filesFile == null) return;
for (int j = 0; j < filesFile.length; j++) {
files.add(filesFile[j]);
}
return;
}
/**
* 显示输出信息
* @param out
*/
public void print (PrintStream out) {
Iterator elements = files.iterator();
while (elements.hasNext()) {
File file=(File) elements.next();
out.println(file.getPath());
}
}
public static void output(String path,String regexp) {
FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
fileGroup1.print(System.out);
}
public static void main (String[] args) {
output("C:\\","[A-z|.]*");
}
附 : 常用的正则表达式: 匹配特定数字: |
android java 字符串正则表达式 分离特殊字符串的更多相关文章
- 我的Java开发学习之旅------>工具类:Java使用正则表达式分离出字符串中的中文和英文
今天看到一个工具类使用正则表达式将一大段字符串中的中文和英文都分离出来了,在此记录一下,读者可以收藏! import java.util.ArrayList; import java.util.Col ...
- 在Java中用正则表达式判断一个字符串是否是数字的方法
package chengyujia; import java.util.regex.Pattern; public class NumberUtil { /** * 判断一个字符串是否是数字. * ...
- Java利用正则表达式统计某个字符串出现的次数
//统计某个字符出现的次数 private void countSubString(){ String string1="香蕉.玉米.面粉"; String string2=&qu ...
- java中用正则表达式判断中文字符串中是否含有英文或者数字
public static boolean includingNUM(String str)throws Exception{ Pattern p = Pattern.compile(" ...
- Java基础之一组有用的类——使用正则表达式搜索子字符串(TryRegex)
控制台程序. 正则表达式只是一个字符串,描述了在其他字符串中搜索匹配的模式.但这不是被动地进行字符序列匹配,正则表达式其实是一个微型程序,用于一种特殊的计算机——状态机.状态机并不是真正的机器,而是软 ...
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- [改善Java代码]推荐在复杂字符串操作中使用正则表达式
一.分析 字符串的操作,诸如追加.合并.替换.倒序.分隔等,都是在编码过程中经常用到的,而且Java也提供了append.replace.reverse.split等方法来完成这些操作,它们使用起来 ...
- java正则表达式,将字符串中\后的第一个字母变成大写
java正则表达式,将字符串中\后的第一个字母变成大写 例子是比较简单,注意的是java中的“\\”意义是:我要插入一个正则表达式的反斜线,所以其后面的字符有特殊有意义.所以普通反斜线应该是" ...
- Java中用正则表达式截取字符串中
Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串.比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市.正则表达式为() A ".*?(?=\\()" ...
随机推荐
- [Luogu 1262] 间谍网络
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- cmd解压压缩包
需要安装有winrar start winrar x C:\Users\systme\Desktop\xxx.rar c:\123
- Event Recommendation Engine Challenge分步解析第一步
一.简介 此项目来自kaggle:https://www.kaggle.com/c/event-recommendation-engine-challenge/ 数据集的下载需要账号,并且需要手机验证 ...
- Windows 运行库
Microsoft Visual C++ 2005 Redistributable - 8.0.61001http://download.microsoft.com/download/8/B/4/8B ...
- vscode Live Server使用
vscode 的Live Server插件可以开启本地服务器
- [NIO-2]通道和FileChannel
通道是什么 通道式(Channel)是java.nio的第二个主要创新.通道既不是一个扩展也不是一项增强,而是全新的.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓 ...
- 阅读:重新介绍 JavaScript(JS教程)
这篇文章是记录自己阅读重新介绍 JavaScript(JS 教程)的记录和个人体会 在线调试代码工具:https://codepen.io/pen 引言 分歧根源:名字Javascript和Java有 ...
- sql注入问题-视图-事物-以及存储过程(可视化工具)
可视化工具(了解) 可视化工具 workbench 视图 视图 是一张虚拟的表 语法: create view 视图表名 as select * from t1; 作用: .他是执行as 后面的sql ...
- node的优缺点及应用场景
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎(V8引擎执行Javascript的速度非常快,性能非常好) 可以说node是运行在服务器端V8引擎上的Ja ...
- SpringBoot系列: Eclipse+Maven环境准备
这个链接比我写得更全面, http://tengj.top/2018/01/01/maven/ =============================20190115补充: maven 的一些插件 ...