① java正則表達式的怎麼提取兩個字元之間的值
實現方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "A876X";
// 把要匹配的字元串寫成正則表達式,然後要提取的字元使用括弧括起來
// 在這里,我們要提取最後一個數字,正則規則就是「一個數字加上大於等於0個非數字再加上結束符」
Pattern pattern = Pattern.compile("(\\d)[^\\d]*$");
Matcher matcher = pattern.matcher(s);
if(matcher.find())
System.out.println(matcher.group(1));
}
}
關於Matcher 中的幾個方法說明:
Mathcer.start()/ Matcher.end()/ Matcher.group()
當使用matches(),lookingAt(),find()執行匹配操作後,就可以利用以上三個方法得到更詳細的信息.
start()返回匹配到的子字元串在字元串中的索引位置.
end()返回匹配到的子字元串的最後一個字元在字元串中的索引位置.
group()返回匹配到的子字元串
Java代碼示例:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Pattern p=Pattern.compile(「\d+」);
Matcher m=p.matcher(「aaa2223bb」);
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223後的索引號
m.group();//返回2223
Mathcer m2=p.matcher(「2223bb」);
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由於lookingAt()只能匹配前面的字元串,所以當使用lookingAt()匹配時,start()方法總是返回0
m2.end(); //返回4
m2.group(); //返回2223
Matcher m3=p.matcher(「2223」); //如果Matcher m3=p.matcher(「2223bb」); 那麼下面的方法出錯,因為不匹配返回false
m3.matches(); //匹配整個字元串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因為matches()需要匹配所有字元串
m3.group(); //返回2223
說了這么多,相信大家都明白了以上幾個方法的使用,該說說正則表達式的分組在java中是怎麼使用的.
start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用於分組操作,Mathcer類還有一個groupCount()用於返回有多少組.
Java代碼示例:
?
1
2
3
4
5
6
7
8
9
10
Pattern p=Pattern.compile(「([a-z]+)(\d+)」);
Matcher m=p.matcher(「aaa2223bb」);
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因為有2組
m.start(1); //返回0 返回第一組匹配到的子字元串在字元串中的索引號
m.start(2); //返回3
m.end(1); //返回3 返回第一組匹配到的子字元串的最後一個字元在字元串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一組匹配到的子字元串
m.group(2); //返回2223,返回第二組匹配到的子字元串
現在我們使用一下稍微高級點的正則匹配操作,例如有一段文本,裡面有很多數字,而且這些數字是分開的,我們現在要將文本中所有數字都取出來,利用java的正則操作是那麼的簡單.
Java代碼示例:
?
1
2
3
4
5
Pattern p=Pattern.compile(「\d+」);
Matcher m=p.matcher(「我的QQ是:456456 我的電話是:0532214 我的郵箱是:[email protected]」);
while(m.find()) {
System.out.println(m.group());
}
輸出:
456456
0532214
123
如將以上while()循環替換成
?
1
2
3
4
5
while(m.find()) {
System.out.println(m.group());
System.out.print(「start:」+m.start());
System.out.println(」 end:」+m.end());
}
則輸出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39
現在大家應該知道,每次執行匹配操作後start(),end(),group()三個方法的值都會改變,改變成匹配到的子字元串的信息,以及它們的重載方法,也會改變成相應的信息.
注意:只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用。
② java 字元串數組按奇數偶數讀取出來
思路:
1.定義兩個字元串odd,even;分別存放偶次下標和奇次下標的字元串的累加值
2.把字元串分隔成字元串數組
3.循環字元串數組,偶次下標值累加到even,奇次下標值累加到odd
4.列印出odd和even
java代碼:
String str = "1,名字1,2,名字2,3,名字3";
// 1
StringBuffer odd = new StringBuffer(1024);
StringBuffer even = new StringBuffer(1024);
// 2
String[] strArr = str.split(",");
// 3
for(int i = 0; i < strArr.length; i++)
{
if(i % 2 == 0)
{
if(0 == even.length())
{
even.append(strArr[i]);
}
else
{
even.append("," + strArr[i]);
}
}
else
{
if(0 == odd.length())
{
odd.append(strArr[i]);
}
else
{
odd.append("," + strArr[i]);
}
}
}
// 4
System.out.println(even);
System.out.println(odd);
③ Java怎麼輸出兩個反斜杠//,怎麼輸出兩個雙引號""等等
要輸出//,
直接
System.out.println("//");
就行,不需要轉義。
輸出""可以用
System.out.println("\"\"");
輸出\\可以用
System.out.println("\\\\");