賜除掉某一字符串中連續重複的字符序列

目的:把字符串中連續重複的字符賜除掉。

輸入:序列:kkkhan888shioobo66

正確的返回結果應該是:hanshibo

思路解析:

1 使用JAVA正則表達式,匹配出連續相同的字符或數字。

2 查找出匹配出來的序列,並取出來放到list裏面

3 對list進行排序。把重複的序列排在前面。(該步可省略)

4找出連續重複的子序列,並把這些連續重複的子序列用空(字字符串)替換。

5 返回輸出。

具體完整代碼及完整註釋如下:

package com.tm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 賜除掉重複連續的字符
 * @author hanshibo
 */
public class Test
{
	public static void main(String[] args)
	{
		String strings = matcher("kkkhan888shioobo66");
		System.out.println(strings);
	}

	public static String matcher(String input)
	{
		//創建一個List 
		List<String> list = new ArrayList<String>();
		//創建匹配的模式
		Pattern pattern = Pattern.compile("(.)\\1*");
		//匹配器
		Matcher matcher = pattern.matcher(input);
		//查找與該模式匹配的子序列。從"+kkkhan888shioobo66" 裏面 查找出 與 此模式 "(.)\\1*"  相匹配的 子序列。如果存在,返回true,如果不存在,返回false.
		while (matcher.find())
		{
			//返回匹配的子序列,並加入到list裏面。
			list.add(matcher.group());
		}
		System.out.println(list);
		//對分好組的List,進行排序。根據指定比較器產生的順序對指定列表進行排序。把重複的序列排在前面。
		Collections.sort(list, new Comparator<String>()
		{
			public int compare(String o1, String o2)
			{
				return o2.length() - o1.length();
			}
		});
		//找到連續重複的字符,加入到數組中。
		String[] strings = list.toArray(new String[0]);
		//找出連續並且重複的子序列。並且把這些連續重複的子序列用空字符串替換。
		for(int i=0 ;i<=strings.length-1;i++){
			if(strings[i].length()>1){
				System.out.println(strings[i]);
				input=input.replace(strings[i],"");
				System.out.println(input);
			}
		}
		System.out.println("最終結果:"+input);
		//返回把連續重複的字符賜除掉的字符序列。
		return input;
	}
}
注意:

java連續多位相同字符判斷的正則表達式

([0-9])\1{5} 或 ([\d])\1{5} 連續相同的6位數字 如:333333
([0-9a-zA-Z])\1{5}   連續相同的6位數字或字母 如:222222 cccccc ZZZZZZ
([\d])\1{2}([a-z])\2{2} 連續相同3位數字後根連續相同的三位小寫字母 如:222www
([\d])\1{2}([a-z])\2{2}|([a-z])\3{2}([\d])\4{2} 同上,但是能匹配數字+字母或字母+數字 如:222www 或 www222
自己可以擴展,要注意的就是 \1 \2代表位置,從左到右遞增




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章