簡體   English   中英

在Java中創建正則表達式時需要幫助

[英]Need help in creating a regular expression in Java

我正在嘗試將正則表達式應用於字符串以獲取以下格式的輸出。

輸入字符串:

params=Param1{index}~[Value1|Value2|....]^Param2~[Value1|Value2|....]

輸出應采用Map<String,List<String>>的形式。

Key1: Param1
Value : Value1,Value2 upto ValueN
Key2 :Param2
Value: Value1,Value2 uptoValueN

代碼:她是我正在嘗試執行的代碼。

String textPatt = "params";
String key = textPatt.replace("/[\\[]/", "\\[").replace("/[\\]]/", "\\]");
String pattern = new String("[\\?&]" + key + "=([^&#]*)");
 Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(masterUrl);
List<String> paramList = new ArrayList<String>();
if (m.find()) {
String param = m.group();

if(param != null){
    String[] multiParamArr  = null;
    if(param.indexOf("^") != -1){
        multiParamArr = param.split("\\^");


    }else{
        multiParamArr = new String[1];
        multiParamArr[0] = param;
    }
    if(multiParamArr != null && multiParamArr .length > 0){


            Pattern refinePattern = null;
            Matcher refineMatcher = null;
            String paramKeyy = null;
            String paramVal = null;

            HashMap<String,List<String>> ParamMap = new HashMap<String,List<String>>();
             List<String list = new ArrayList<String>();
            for(int i=0;i<multiParamArr.length;i++){
                String[] multiParam = null;
                 String patternKey = "^[^\\~]*";
                 refinePattern = Pattern.compile(patternKey);
                 refineMatcher = refinePattern.matcher(multiRefineArr[i]);
                 if(refineMatcher.find()){
                 paramKey = refineMatcher.group();
                  if(paramKey.indexOf("=") !=-1){
                      patternKey  = patternKey.substring(patternKey.indexOf("=")+1);
                  }
                  if(paramKey.indexOf("{") !=-1){
                      patternKey  = patternKey.substring(patternKey.indexOf("=")+1,patternKey.indexOf("{"));
                  }
                 }
                    if(multiParamArr[i].indexOf("|") != -1){
                         multiParam = multiParamArr[i].split("\\|");
                         int startIndex;
                         int endIndex;

                        for(int j=0;j<multiParam.length;j++){
                            startIndex = 0;
                            endIndex = 0;
                            ifmultiParamArr[j].indexOf("[") > -1){
                                 startIndex = multiParamArr[j].indexOf("[")+1;
                            }
                            ifmultiParamArr[j].indexOf("]") > -1){
                                endIndex = multiParamArr[j].indexOf("]");

                            }else{
                                endIndex = multiParamArr[j].length();
                            }
                        paramVal = multiParamArr[j].substring(startIndex,endIndex);

                        }
                    }else{
                        paramVal = multiParamArr[i].substring(multiParamArr[i].indexOfmultiParamArr[i].indexOf("]"));

                    }
                    list.add(paramVal);

                }
   paramMap.put((paramKey,list);
    }


}

如何應用單個正則表達式並實現輸出

您可以嘗試一些步驟,而不是嘗試創建和維護復雜的正則表達式,而是更簡單,更易讀的方式:

  1. 拆分^
  2. 現在您有了一個字符串數組,每個字符串都包含一個參數及其值
  3. ~上分割每個字符串-您將得到兩個字符串的數組,從第一個字符串中提取Param1Param2等)
  4. 從第二個開始,您可以通過分割|來提取值列表。 (管)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM