Java如何替換第一個(gè)和最后一個(gè)字符串
Java替換第一個(gè)和最后一個(gè)字符串
1、測試類
package com.jeff.json;
import com.alibaba.fastjson.JSONObject;
public class JsonDemo1 {
public static void main(String[] args) {
String ret = "\"{\"success\":true,\"msg\":\"success\",\"data\":{}}\"";
System.out.println(ret);
if (ret.startsWith("\"")) {
ret = replaceFirst(ret, "\"", "");
System.out.println("去除前引號:" + ret);
}
if (ret.endsWith("\"")) {
ret = replaceLast(ret, "\"", "");
System.out.println("去除后引號:" + ret);
}
JSONObject result = JSONObject.parseObject(ret);
System.out.println(result);
}
private static String replaceFirst(String ret, String strToReplace, String replaceWithThis) {
return ret.replaceFirst(strToReplace, replaceWithThis);
}
public static String replaceLast(String text, String strToReplace, String replaceWithThis) {
return text.replaceFirst("(?s)" + strToReplace + "(?!.*?" + strToReplace + ")", replaceWithThis);
}
}
2、控制臺

java 只替換String字符串中第一次出現(xiàn)的某個(gè)子串
問題現(xiàn)象:
今天在項(xiàng)目中遇到一個(gè)問題:如何替換一個(gè)String字符串中第一次出現(xiàn)的某個(gè)子串.
問題分析:
從問題可知,這個(gè)String字符串中應(yīng)該含有多個(gè)該子串,然后這些子串是錯落分布在這個(gè)String父串中的.
因此如果只是想要替換第一次出現(xiàn)的該子串的話,其實(shí)只需要調(diào)用String的replaceFirst()方法即可;
1.s.replaceFirst("正則表達(dá)式[被替換的子串]",替換后的子串);
但是呢,有一點(diǎn)需要注意的,就是這個(gè)方法的第一個(gè)參數(shù)是正則表達(dá)式,所以調(diào)用該方法的小伙伴記得先復(fù)習(xí)一下正則表達(dá)式的內(nèi)容:
這里提幾點(diǎn):
- .匹配除換行符以外的任意字符
- ^匹配字符串的開始
- $匹配字符串的結(jié)束
- *重復(fù)零次或更多次
- +重復(fù)一次或更多次
- ?重復(fù)零次或一次
當(dāng)然了,用到正則表達(dá)式總感覺挺麻煩的,其實(shí)這里也可以用 \ 轉(zhuǎn)義字符來轉(zhuǎn)義從而消除正則表達(dá)式的限制.
除了替換第一次出現(xiàn)的子串之外,還有一些其他的替換方法:
2.s.replace("被替換的子串",替換后的子串);
s.replace()用于替換父串中所有被匹配的子串,這個(gè)方法不需要正則表達(dá)式,是很常用的字符串替換方法
3.s.replaceAll("正則表達(dá)式[被替換的子串]",替換后的子串);
s.replaceAll()這個(gè)方法和s.replace()的作用是一樣的,區(qū)別在于:首參數(shù)是正則表達(dá)式.
解決方法
String s = "#y*#test*#txt";
String s1 = s.replaceFirst("\\*#", "_");
String s1_2 = s.replaceFirst(".#", "_");
String s2 = s.replace("\\*#", "_");
String s2_2 = s.replace(".#", "_");
String s3 = s.replaceAll("\\*#", "_");
String s3_2 = s.replaceAll(".#", "_");
打印結(jié)果:
s1="#y_test*#txt"
s1_2="#y_test*#txt"
s2="#y*#test*#txt"
s2_2="#y*#test*#txt"
s3="#y_test_txt"
s3_2="#y_test_txt"
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java Scoket實(shí)現(xiàn)雙向通信代碼詳解
這篇文章主要介紹了Java Scoket實(shí)現(xiàn)雙向通信代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot集成Elasticsearch過程實(shí)例
這篇文章主要介紹了SpringBoot集成Elasticsearch過程實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程
WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成握手。本文給大家介紹Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
基于Java Callable接口實(shí)現(xiàn)線程代碼實(shí)例
這篇文章主要介紹了基于Java Callable接口實(shí)現(xiàn)線程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
java實(shí)現(xiàn)讀取帶合并單元格的Excel
這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)讀取帶合并單元格的Excel,文中的示例代碼講解詳細(xì), 感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
Java項(xiàng)目NoProviderFoundException報(bào)錯的解決方案
在Java開發(fā)中,jakarta.validation.NoProviderFoundException?是一個(gè)令人困惑的運(yùn)行時(shí)錯誤,常因校驗(yàn)框架依賴缺失或版本沖突導(dǎo)致,本文給大家介紹了Java項(xiàng)目NoProviderFoundException報(bào)錯的解決方案,需要的朋友可以參考下2025-06-06
SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法
Redisson是一個(gè)用于Java的Redis客戶端,它提供了在分布式環(huán)境下操作Redis數(shù)據(jù)庫的簡單、高效的方式,本文主要介紹了SpringBoot集成Redisson操作Redis的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03

