最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java正則表達式精確查找和替換指定字符代碼示例

 更新時間:2024年04月28日 10:20:38   作者:天狼1222  
這篇文章主要給大家介紹了關(guān)于java正則表達式精確查找和替換指定字符的相關(guān)資料,java正則表達式是一種用于匹配、查找和替換文本的強大工具,它可以用于驗證輸入是否符合特定的格式、從文本中提取信息、以及將文本中的某些內(nèi)容替換成其他內(nèi)容,需要的朋友可以參考下

情形:

在復制模型的時候,要給名稱加上“-復制”。一開始用的是 replace進行全部替換。在測試的時候,出現(xiàn)有元素名稱跟模型名稱是一樣的,這樣替換就有問題。這時候要改成正則去匹配和替換對應(yīng)內(nèi)容。

{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表單模型A",
		"flowNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表單模型A",
		"flowNameUs": "流程表單模型A",
		"formName": "流程表單模型A",
		"formNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A"
	}
}

目標: 替換里面 flowName, flowNameUs,formName和formNameUs的名稱

先處理一個

先寫正則表單式: 

String pattern ="\"flowName\""+ ":"+"\\s*\"" + modelName + "\"";

\\s*可以匹配0到多個空格

匹配到對應(yīng)值后,用整個值進行替換

public static String matchReplaceName(String content, String modelName, String newModelName)
    {
        String pattern ="\"flowName\""+ ":"+"\\s*\"" + modelName + "\"";
        System.out.println("pattern "+pattern);
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(content);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String group = m.group();
            m.appendReplacement(sb, group.replace(modelName, newModelName));
        }
        m.appendTail(sb);
        return sb.toString();
    }

測試:

    public static void main(String[] args) {
        String content = initData();
        String modelName = "流程表單模型A";
        String newModelName = "流程表單模型A-復制";
        content = matchReplaceName(content, modelName, newModelName);
        System.out.println(content);
    } 

    private static String initData(){
        String data = "{\n" +
                "\t\"flowModel\": {\n" +
                "\t\t\"flowMod\": 502,\n" +
                "\t\t\"flowType\": 2,\n" +
                "\t\t\"flowTypeName\": \"普通流程\",\n" +
                "\t\t\"flowTypeNameUs\": \"common\",\n" +
                "\t\t\"flowName\": \"流程表單模型A\",\n" +
                "\t\t\"flowNameUs\": \"流程表單模型A\",\n" +
                "\t\t\"fieldName\": \"流程表單模型A\",\n" +
                "\t\t\"state\": \"A\"\n" +
                "\t},\n" +
                "\t\"formModel\": {\n" +
                "\t\t\"formId\": 108,\n" +
                "\t\t\"flowMod\": 502,\n" +
                "\t\t\"flowName\": \"流程表單模型A\",\n" +
                "\t\t\"flowNameUs\": \"流程表單模型A\",\n" +
                "\t\t\"formName\": \"流程表單模型A\",\n" +
                "\t\t\"formNameUs\": \"流程表單模型A\",\n" +
                "\t\t\"fieldName\": \"流程表單模型A\"\n" +
                "\t}\n" +
                "}";
        return data;
    }

結(jié)果:

pattern "flowName":\s*"流程表單模型A"
{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表單模型A-復制",
		"flowNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表單模型A-復制",
		"flowNameUs": "流程表單模型A",
		"formName": "流程表單模型A",
		"formNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A"
	}
}

多個的:

表達式:

完成了單個,多個的用"|"進行分隔,先繼續(xù)寫單個的,然后拼接多一起

     public static String matchReplaceName(String content, String modelName, String newModelName)
    {
        String condition = ":"+"\\s*\"" + modelName + "\"";
        String pattern1 = "\"flowName\""+condition;
        String pattern2 = "\"flowNameUs\""+condition;
        String pattern3 = "\"formName\""+condition;
        String pattern4 = "\"formNameUs\""+condition;
        String pattern = pattern1 +"|"+pattern2+"|"+ pattern3 +"|"+pattern4;
        System.out.println("pattern "+pattern);
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(content);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            String group = m.group();
            group = group.replace(modelName, newModelName);
            m.appendReplacement(sb, group);
        }
        m.appendTail(sb);
        return sb.toString();
    }

最后可以把pattern的輸出弄成一整行

測試結(jié)果:

pattern "flowName":\s*"流程表單模型A"|"flowNameUs":\s*"流程表單模型A"|"formName":\s*"流程表單模型A"|"formNameUs":\s*"流程表單模型A"
{
	"flowModel": {
		"flowMod": 502,
		"flowType": 2,
		"flowTypeName": "普通流程",
		"flowTypeNameUs": "common",
		"flowName": "流程表單模型A-復制",
		"flowNameUs": "流程表單模型A-復制",
		"fieldName": "流程表單模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表單模型A-復制",
		"flowNameUs": "流程表單模型A-復制",
		"formName": "流程表單模型A-復制",
		"formNameUs": "流程表單模型A-復制",
		"fieldName": "流程表單模型A"
	}
}

附:如何在java中獲取兩個字符之間的精確字符串

在Java中,可以使用String類的substring()方法來獲取兩個字符之間的精確字符串。該方法接受兩個參數(shù),分別是起始索引和結(jié)束索引(不包括結(jié)束索引)。下面是一個示例代碼:

String str = "Hello, World!";
int startIndex = 7; // 起始索引
int endIndex = 13; // 結(jié)束索引(不包括)
String result = str.substring(startIndex, endIndex);
System.out.println(result); // 輸出 "World"

在上述示例中,我們定義了一個字符串"Hello, World!",然后使用substring()方法獲取了索引為7到12的子字符串,即"World"。

需要注意的是,索引是從0開始的,所以起始索引為7表示從第8個字符開始,結(jié)束索引為13表示到第14個字符之前結(jié)束。

這種方法適用于獲取兩個字符之間的精確字符串,可以用于各種字符串處理場景,例如提取關(guān)鍵信息、截取特定部分等。

總結(jié):

如果要精確替換指定字符,可以考慮正則,\\s*可以匹配0到多個空格 適用性會replace更好。先從單個開始入手,再逐個增加,驗證,這樣更能發(fā)現(xiàn)問題和調(diào)試。

到此這篇關(guān)于java正則表達式精確查找和替換指定字符的文章就介紹到這了,更多相關(guān)java正則精確查找替換字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

焉耆| 石景山区| 泾阳县| 西宁市| 虞城县| 许昌县| 怀化市| 招远市| 右玉县| 乌兰浩特市| 霍林郭勒市| 苏尼特左旗| 闻喜县| 安新县| 忻州市| 衡阳县| 阿克| 齐河县| 郓城县| 江城| 广丰县| 青海省| 旬阳县| 偏关县| 扶沟县| 剑河县| 买车| 通榆县| 陆川县| 宝山区| 社旗县| 云浮市| 榆社县| 怀远县| 饶平县| 逊克县| 梧州市| 大竹县| 社会| 鄂尔多斯市| 当雄县|