java中如何提取多個字串相同的字元
阿新 • • 發佈:2019-02-04
程式碼如下:
package com.hp.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; /** * 提取多個字串相同的字元 * @author HP * */ public class StringTest{ /** * 提取相同字元 * abc a b c * bcd b c d * cde c d e * @param list * @return */ public static LinkedHashSet<Character> getCommonChar(List<String> list){ //建立結果集合 LinkedHashSet<Character> resultList = new LinkedHashSet<>(); //對資料進行處理 if(list != null && list.size()>0){//集合不為空 //建立集合 LinkedHashSet<Character> charList = new LinkedHashSet<>(); for (String string : list) {//迴圈集合 char[] charArray = string.toCharArray(); for (char c : charArray) { charList.add(c); } } //對全部字元去重,去重結果即為公共元素 resultList.addAll(charList); System.out.println(charList); LinkedHashSet<Character> temp = new LinkedHashSet<>();//中間集合 LinkedHashSet<Character> other = new LinkedHashSet<>();//不是公共字元的集合 for (String string : list) { char[] charArray = string.toCharArray(); //移除 for (char c : charArray) { charList.remove(c); } //中間互動值 temp.addAll(charList);//得到去除後的集合 other.addAll(temp);//新增到不是公共字元裡 System.out.println(temp+"--------------"); charList.addAll(resultList); System.out.println(charList+"*********"); temp.clear();//清空中間集合 System.out.println("--------------------------------"); } // 去除不是公共的字元 resultList.removeAll(other); } System.out.println("結果為:"+resultList); //返回公共字元 return resultList; } public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("abc"); list.add("bcd"); list.add("cde"); getCommonChar(list); } }
執行結果如下:
[a, b, c, d, e]
[d, e]--------------
[d, e, a, b, c]*********
--------------------------------
[e, a]--------------
[e, a, b, c, d]*********
--------------------------------
[a, b]--------------
[a, b, c, d, e]*********
--------------------------------
結果為:[c]
分析:
1.當傳入多個字串時就不能簡單的像倆個字串提取一樣,必須要轉換思路,也就是先把所有的字元儲存到一個總的集合裡面,
2.對字串集合遍歷,對每個字串進行去重操作,之所以進行去重,是因為如果一個字串都不包含這個字元,那麼這個字元一定不是公共字元,
3.用總的字元集合,減去不是公共字元的總集合,得到公共字元總集合.