Java正規表現4:Javaでの正規表現の適用;ファイルを読み取るときの相対パスと絶対パス(srcディレクトリの下とWebContentディレクトリの下では、この部分はまだ書き込まれていません...);

目次

1つ:Javaで正規表現を使用する方法

2:ファイルを読み取るときの相対パスと絶対パス


1つ:Javaで正規表現を使用する方法

ケースの要件:Webページの情報を取得します:sample.html、RegexSample.javaクラス。

sample.html:目標は、このページで都市の中国語と英語の名前を取得することです

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>国际主要城市</h1>
	<ul>
		<li>纽约NewYork</li>
		<li>伦敦London</li>
		<li>东京Tokyo</li>
		<li>巴黎Paris</li>
		<li>香港HongKong</li>
		<li>新加坡Singapore</li>
		<li>悉尼Sydney</li>
		<li>米兰Milano</li>
		<li>上海Shanghai</li>
		<li>北京Beijing</li>
		<li>马德里Madrid</li>
		<li>莫斯科Moscow</li>
		<li>首尔Seoul</li>
		<li>曼谷Bangkok</li>
		<li>多伦多Toronto</li>
		<li>布鲁塞尔Brussels</li>
		<li>芝加哥Chicago</li>
		<li>吉隆坡KualaLumpur</li>
		<li>孟买Mumbai</li>
		<li>华沙Warsaw</li>
		<li>圣保罗SaoPaulo</li>
		<li>苏黎世Zurich</li>
		<li>阿姆斯特丹Amsterdam</li>
		<li>墨西哥城MexicoCity</li>
		<li>雅加达Jakarta</li>
		<li>都柏林Dublin</li>
		<li>曼谷Bangkok</li>
		<li>台北Taipei</li>
		<li>伊斯坦布尔Istanbul</li>
		<li>里斯本Lisbon</li>
		<li>罗马Rome</li>
		<li>法兰克福Frankfurt</li>
		<li>斯德哥尔摩Stockholm</li>
		<li>布拉格Prague</li>
		<li>维也纳Vienna</li>
		<li>布达佩斯Budapest</li>
		<li>雅典Athens</li>
		<li>加拉加斯Caracas</li>
		<li>洛杉矶LosAngeles</li>
		<li>新西兰NewZealand</li>
		<li>圣地亚哥SanDiego</li>
		<li>布宜诺斯艾利斯BuenosAires</li>
		<li>华盛顿Washington</li>
		<li>墨尔本Melbourne</li>
		<li>约翰内斯堡Johannesburg</li>
		<li>亚特兰大Atlanta</li>
		<li>巴塞罗那Barcelona</li>
		<li>旧金山SanFrancisco</li>
		<li>马尼拉Manila</li>
		<li>波哥大Bogota</li>
		<li>特拉维夫TelAviv-Yafo</li>
		<li>新德里NewDelhi</li>
		<li>迪拜Dubai</li>
		<li>布加勒斯特Bucharest</li>
		<li>奥斯陆Oslo</li>
		<li>柏林Berlin</li>
		<li>赫尔辛基Helsinki</li>
		<li>日内瓦Geneva</li>
		<li>利雅得Riyadh</li>
		<li>哥本哈根Copenhagen</li>
		<li>汉堡Hamburg</li>
		<li>开罗Cairo</li>
		<li>卢森堡Luxembourg</li>
		<li>班加罗尔Bangalore</li>
		<li>达拉斯Dallas</li>
		<li>科威特城Kuwaitcity</li>
		<li>波士顿Boston</li>
		<li>慕尼黑Munich</li>
		<li>迈阿密Miami</li>
		<li>利马Lima</li>
		<li>基辅Kiev</li>
		<li>休斯顿Houston</li>
		<li>广州Guangzhou</li>
		<li>贝鲁特Beirut</li>
		<li>卡拉奇Karachi</li>
		<li>索菲亚Sophia</li>
		<li>蒙得维的亚Montevideo</li>
		<li>里约热内卢RioDEJaneiro</li>
		<li>胡志明市HoChiMinhCity</li>
		<li>蒙特利尔Montreal</li>
		<li>内罗毕Nairobi</li>
		<li>巴拿马城Panamacity</li>
		<li>金奈Chennai</li>
		<li>布里斯班Brisbane</li>
		<li>卡萨布兰卡Casablanca</li>
		<li>丹佛Denver</li>
		<li>基多Quito</li>
		<li>斯图加特Stuttgart</li>
		<li>温哥华Vancouver</li>
		<li>麦纳麦MaiNaMai</li>
		<li>危地马拉市Guatemalacity</li>
		<li>开普敦CapeTown</li>
		<li>圣何塞SanJose</li>
		<li>西雅图Seattle</li>
		<li>深圳Shenzhen</li>
		<li>珀斯Perth</li>
		<li>加尔各答Calcutta</li>
		<li>安特卫普Antwerp</li>
		<li>费城Philadelphia</li>
		<li>鹿特丹Rotterdam</li>
		<li>拉各斯Lagos</li>
		<li>波特兰Portland</li>
		<li>底特律Detroit</li>
		<li>曼彻斯特Manchester</li>
		<li>惠灵顿Wellington</li>
		<li>里加Riga</li>
		<li>爱丁堡Edinburgh</li>
		<li>圣彼得堡StPetersburg</li>
		<li>圣迭戈SanDiego</li>
		<li>伊斯兰堡Islamabad</li>
		<li>伯明翰Birmingham</li>
		<li>多哈Doha</li>
		<li>阿拉木图AlmaAtaAlmaty</li>
		<li>卡尔加里Calgary</li>
	</ul>
</body>
</html>

RegexSample.javaクラス:Javaで正規表現を使用する3つのステップに注意しください!これがこのブログの核心です!

package com.imooc.regex;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 读取本地的html文件
 * @author Administrator
 *
 */
public class RegexSample {
	public static void main(String[] args) {
		StringBuilder content = new StringBuilder();  // StringBuilder用来存放文件的内容
		try {
			// FileInputStream文件输入流,是二进制流
			FileInputStream fis = new FileInputStream("E:\\jee-eclipse-workspace\\regex\\WebContent\\sample.html");
			InputStreamReader isr = new InputStreamReader(fis,"UTF-8");  // 将二进制流转换成可读的字符串流
			BufferedReader bufferedReader = new BufferedReader(isr); //引入缓冲机制,提升效率;
			String lineText = "";
			while((lineText = bufferedReader.readLine()) != null) {
				//System.out.println(lineText);
				content.append(lineText);
			}
			bufferedReader.close();
			System.out.println(content);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 1.在Java中创建Pattern对象即正则表达式对象;;;;;表达式分组除了让正则表达式可读性提升外,一个
		//   重要作用就是:在Java中可以将分组的信息单独提取,即可以单独地提取第一个分组得到中文,可以单独地提取第二个分组得到英文
		Pattern p = Pattern.compile("<li>([\\u4e00-\\u9fa5]{2,10})([A-Za-z]+)</li>");
		// 2.匹配正则表达式;;;;;调用正则表达式对象的match()方法对原始字符串进行匹配,会返回一个Matcher匹配器对象;
		Matcher m = p.matcher(content);
		// 3.查找匹配的结果,find()方法:在原始字符串中进行查找,将符合要求的结果进行提取;如果有匹配的返回true,没有匹配的返回false,
		//   如果原字符串有多个匹配的结果(或称如果原字符串有多个符合规则的子串),可以使用循环进行依次地匹配获取;
		while(m.find()) {
			System.out.println(m.group(0));  // group(0):代表上面整个正则表达式对应的结果;group(0)是一定存在的,代表完整匹配信息
			// 如果正则表达式中没有采取表达式分组,group(1)和group(2)是没有的,运行m.group(1)和m.group(2)的时候就会报错;
			//System.out.println(m.group(1));  // group(1):代表第一个分组的内容;    
			//System.out.println(m.group(2));  // group(2):代表第二个分组的内容;
			String chs = m.group(1);
			String eng = m.group(2);
			System.out.println(chs+"-"+eng);
		}
	}
	
	
}

演算結果:


2:ファイルを読み取るときの相対パスと絶対パス

このブログは、srcの下にあるファイルを読み取って読み取り、リフレクションを使用してリソースファイルを読み取ります。


注意:

     (1)将来、特定のニーズを解決するために正規表現を使用する必要がある場合は、このモジュールを単一のメソッドに抽出するか、場合によっては機能カテゴリに要約することができます(カテゴリへの一般化の使用法が広く使用されています、とりあえずわからないけど疑わしい)?

 

おすすめ

転載: blog.csdn.net/csucsgoat/article/details/114155986