BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
使用String类的replaceAll()方法可以移除空白行,只要我用正则表达式匹配到这些空白行,然后把这些空白行替换为空字符串就行了。
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
(?m)
表示开启多行匹配模式,^
匹配行开头,\\s*
0个或多个空白符,$
匹配行结尾,(\\n|\\r\\n)
匹配字符串中的换行符。
测试代码如下:
String text = SysClipboardUtil.getSysClipboardText();
System.out.println("去除无意义空白行后:");
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println(text);
依赖:SysClipboardUtil.getSysClipboardText();
运行结果:
去除无意义空白行后:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
____________________________________
好的,第一个需求做到了。
现在text字符串中,每一行的前面有两个空白符:
,因为这些空白符在行尾,很自然想到使用text.trim()方法取出掉该空白符,但是奇怪的是根本就去不掉。
之所以去不掉是因为这个空格不简单啊,不是普通那种空格,这里称为bug空格
。
bug空格:
普通空格:
、
可以看到这个bug空格
比普通的空格的宽度要宽。不过也不是没有办法。
不过既然这个bug空格可以复制粘贴,那我就直接粘贴到程序中,用它自己来匹配自己,这样使用text.replaceAll("[ ]+","")
就可以把这个bug空格" "
全部替换成空白字符串""
,就相当于删除掉该字符串了。
代码如下:
String text = SysClipboardUtil.getSysClipboardText();
//删除文本中的空白行
text=text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println("删除空白行之后的文本:");
System.out.println(text);
//直接粘贴这个空格到字符组中,
text=text.replaceAll("[ ]+", "");
System.out.println("_______________________________");
System.out.println("去除中文全角空格后:");
System.out.println(text);
复制需要处理的文本,然后运行上面的代码。运行结果如下。
删除空白行之后的文本:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
_______________________________
去除中文全角空格后:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
可以看到用了这种傻瓜式的操作就可以完成任务了。不过还是有点心有不甘,因为不知道这个bug空格是什么东西,下面来看看这个bug空格到底是什么东西。
查了一下,其实这个空格叫做中文(全角)空格
,我怎么知道的呢。先把这个空格转换成Unicode
字符就知道了。
代码如下
String chinese_full_width_space=" ";//中文全角空格
String urlEncoderUnicode = URLEncoder.encode(chinese_full_width_space,"utf-16be");//java中的字符都用utf-16be进行编码,所以转码为utf-16be我们就知道了这个奇怪的字符在java里的编码。这样方便后面查找。
System.out.println(urlEncoderUnicode);
运行结果:
%30%00
%30%00
转换成平常表示的java中的Unicode编码就是\u3000
,然后再到网上查一下看看这个\u3000
是什么:
嗯,原来这个bug空格叫做中文全角空格
好的,既然我们知道了这个奇怪的空格是中文全角空格,也知道对应的Unicode码为\u3000
,java中正则表达式支持Unicode码,所以可以使用text=text.replaceAll("\u3000+", "");
把所以的中文全角空格替换成空字符,也就是移除掉所有的中文全角空格了。
String text = SysClipboardUtil.getSysClipboardText();
//删除文本中的空白行
text=text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
System.out.println("删除空白行之后的文本:");
System.out.println(text);
//直接粘贴这个空格到字符组中,
// text=text.replaceAll("[ ]+", "");
// 使用Unicode码匹配中文全角空格
text=text.replaceAll("\u3000+", "");
System.out.println("_______________________________");
System.out.println("去除中文全角空格后:");
System.out.println(text);
运行结果:
删除空白行之后的文本:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
_______________________________
去除中文全角空格后:
BufferedReader in;
Pattern pattern = Pattern.compile("//(//d{3}//)//s//d{3}-//d{4}");
in = new BufferedReader(new FileReader("phone"));
String s;
while ((s = in.readLine()) != null)
{
Matcher matcher = pattern.matcher(s);
if (matcher.find())
{
System.out.println(matcher.group());
}
}
in.close();
遇到一个不懂的字符的时候可以先把它转为Unicode
码,然再查码表,或者网上查。