关于JAVA正则匹配空白字符的问题(全角空格与半角空格)

今天遇到一个字符串,怎么匹配空格都不成功!!!

我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!!

查了一下    \s    不支持全角

1、"\s"匹配的是哪一种空格?

正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等;中文全角空格

\s 并不能匹配中文全角空格。

\s 只能匹配下面六种字符(详见 java.util.regex.Pattern 的 API DOC):

  1.   半角空格( )
  2.   水平制表符(\t)
  3.   竖直制表符
  4.   回车(\r)
  5.   换行(\n)
  6.   换页符(\f)

java代码中的转义   \\s

正则匹配0个或多个空格,我是这样写的  \\s*

正则匹配一个或多个空格,我是这样写的  \\s+

2、如何匹配全角空格

正则可以这么写:"[\\s\\p{Zs}]+" , 注意java代码中的转义。

3、测试

我的测试例子:

package com.test;

public class zhengze {
	/**
	 * 替换多个<br>成单个<br>
	 * @param args
	 */
	public static void main(String[] args) {
		String str1= "...中间省略很多...<br>      <br>想到自己煮花生仁汤这么简单~赶紧动手试试吧!<br><br>      <br>    <br> <br>";
		String pattern = "<br>(\\s*<br>)+";
		System.out.println("\\s* 替换的结果:");
		System.out.println(str1.replaceAll(pattern,"<br>"));

		String str2= "...中间省略很多...<br>      <br>想到自己煮花生仁汤这么简单~赶紧动手试试吧!<br><br>      <br>    <br> <br>";
		String new_pattern = "<br>([\\s\\p{Zs}]*<br>)+";
		System.out.println("[\\s\\p{Zs}]* 替换的结果:");
		System.out.println(str2.replaceAll(new_pattern,"<br>"));

	}
}

结果:

\s* 替换的结果:
...中间省略很多...<br>      <br>想到自己煮花生仁汤这么简单~赶紧动手试试吧!<br>      <br>    <br>
[\s\p{Zs}]* 替换的结果:
...中间省略很多...<br>想到自己煮花生仁汤这么简单~赶紧动手试试吧!<br>

  

时间: 2024-11-04 20:29:49

关于JAVA正则匹配空白字符的问题(全角空格与半角空格)的相关文章

java 正则匹配提取html纯文本

本文来自于我的个人博客: java 正则匹配提取html纯文本 做内容的大家都知道,从html中直接提取纯文本是一个很大的问题,现将我做的正则匹配贴上: import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestReg { static String reg = "<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*>"; public st

java去掉全角空格和半角空格的方法,

JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " hell o "; String str2 = str.replaceAll(" ", ""); System.out.println(str2); 3.或者replaceAll(" +","

Java 全角字符转半角字符

1.java代码里有时候会遇到代码注入的安全问题,为了防止这种问题,增加了一个过滤功能.主要是过滤全角字符,把url不能识别的全角字符转换成半角字符 1 public class Test { 2 public static void main(String[] args) { 3 String t="■ ■ffac●●△※○○☆№ccc"; 4 System.out.println(t); 5 System.out.println(toSemiangle(t)); 6 } 7 8 /

改造jQuery-Tagit 插件支持中文全角的逗号和空格

jQuery 的 tagit 插件效果还是不错的,今天用到该插件但发现不能自定义标签分隔符,只能是英文半角逗号或空格,于是想改造下 效果: 先研究了一番插件的代码,发现并不能通过插件自身的扩展方法来实现, 标签输入框是插件自己生成的,所以本来想在外部绑定 keydown 事件但由于事件绑定先后顺序的问题不能实现,只能修改代码了: 改动不多,主要是增加了三个事件绑定在插件原来的 keydown 事件之前绑定一个自定义的 keydown 以及 blur 事件处理标签内容的过滤,以及 keyup 后模

数据清洗小记(2):全角数字转换半角数字

原创作品.出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46340383 [背景] 在将某数字类型字段插入到目标端时,报错.提示类型不对,查看数据发现确实为number,但发现为"全角"数字. [解决] 利用函数,将"全角"转换成"半角",使用如:to_single_

数据清洗小记:全角数字转换半角数字

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46340383 [背景] 在将某数字类型字段插入到目标端时,报错,提示类型不正确,查看数据发现确实为number,但发现为"全角"数字. [解决] 利用函数,将"全角"转换成"半角",使用如:to_single

全角字符转换半角字符原来

/** * 全角空格为12288,半角空格为32 * 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 * * 将字符串中的全角字符转为半角 * @param src 要转换的包含全角的任意字符串 * @return  转换之后的字符串 */ public static String toSemiangle(String src) { char[] c = src.toCharArray(); for (int index = 0; index < c.

java正则匹配

java正则提取需要用到Matcher类,下面给出案例示例供参考 需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {public static void main(String[] args) {String s = "A876X";// 把要匹配的字符串写成正则表达式,然后要提取的字符使用括号括起来

4-30 Java正则匹配

做CC时经常要用正则表达式过滤数据,当时洗的数据比较复杂,规则比较多.这次做leetcode,复习一下Java的正则匹配.Leetcode 537. Complex Number Multiplication 从表示复数的字符串里把实部和虚部取出来. http://blog.csdn.net/yin380697242/article/details/52049999 Pattern类,构造函数是私有类型,不能通过new新建,要通过Pattern.compile()获得一个匹配模式.Pattern