欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

情形:

在復(fù)制模型的時(shí)候,要給名稱加上“-復(fù)制”。一開始用的是 replace進(jìn)行全部替換。在測(cè)試的時(shí)候,出現(xiàn)有元素名稱跟模型名稱是一樣的,這樣替換就有問題。這時(shí)候要改成正則去匹配和替換對(duì)應(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"
	}
}

目標(biāo): 替換里面 flowName, flowNameUs,formName和formNameUs的名稱

先處理一個(gè)

先寫正則表單式: 

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

\\s*可以匹配0到多個(gè)空格

匹配到對(duì)應(yīng)值后,用整個(gè)值進(jìn)行替換

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();
    }

測(cè)試:

    public static void main(String[] args) {
        String content = initData();
        String modelName = "流程表單模型A";
        String newModelName = "流程表單模型A-復(fù)制";
        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-復(fù)制",
		"flowNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A",
		"state": "A"
	},
	"formModel": {
		"formId": 108,
		"flowMod": 502,
		"flowName": "流程表單模型A-復(fù)制",
		"flowNameUs": "流程表單模型A",
		"formName": "流程表單模型A",
		"formNameUs": "流程表單模型A",
		"fieldName": "流程表單模型A"
	}
}

多個(gè)的:

表達(dá)式:

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

     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的輸出弄成一整行

測(cè)試結(jié)果:

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

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

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

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

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

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

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

總結(jié):

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

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

相關(guān)文章

最新評(píng)論