Java字符串中指定部分反轉(zhuǎn)的三種方式
將“asdfghj”反轉(zhuǎn)為“ashgfdj”
方式一:把字符串轉(zhuǎn)化為char[]
調(diào)用String類中toCharArray()方法把字符串轉(zhuǎn)化為字符,而后開始時(shí)索引和結(jié)束時(shí)索引利用for()循環(huán)反轉(zhuǎn)指定字符,結(jié)束
public class StringDemo {
public static void main(String[] args) {
StringDemo stringDemo = new StringDemo();
String str1 = "asdfghj";
String str2 = stringDemo.reverse1(str1,2,5);
System.out.println("反轉(zhuǎn)后為:" + str2);
}
public String reverse1(String str, int start, int end) {
if (str != null) {
char[] charArray = str.toCharArray();
for (int i = start, j = end; i < j; i++, j--) {
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
return new String(charArray);
}
return null;
}
}
運(yùn)行結(jié)果:
反轉(zhuǎn)后為:ashgfdj
方式二:使用String的拼接
將字符串分割為三部分:需反轉(zhuǎn)字符串前,需反轉(zhuǎn)字符串,需反轉(zhuǎn)字符串之后,調(diào)用substring()方法截取字符串,循環(huán)倒序遍歷需反轉(zhuǎn)字符串部分,后拼接這三部分
public static void main(String[] args) {
StringDemo stringDemo = new StringDemo();
String str1 = "asdfghj";
String str2 = stringDemo.reverse1(str1,2,5);
System.out.println("反轉(zhuǎn)后為:" + str2);
}
public String reverse1(String str, int start, int end) {
// 第一部分
String newStr = str.substring(0, start);
// 第二部分
for (int i = end; i >= start; i--) {
newStr += str.charAt(i);
}
// 第三部分
newStr += str.substring(end + 1);
return newStr;
}
運(yùn)行結(jié)果:
反轉(zhuǎn)后為:ashgfdj
方式三:使用StringBuffer/StringBuilder替換String
相較于方式二的改進(jìn),用Stringbuilder中append()方法代替方式二中“+=”,效率更高
public class StringDemo {
public static void main(String[] args) {
StringDemo stringDemo = new StringDemo();
String str1 = "asdfghj";
String str2 = stringDemo.reverse1(str1,2,5);
System.out.println("反轉(zhuǎn)后為:" + str2);
}
public String reverse1(String str, int start, int end) {
StringBuffer s = new StringBuffer(str.length());
// 第一部分
s.append(str.substring(0, start));
// 第二部分
for (int i = end; i >= start; i--) {
s.append(str.charAt(i));
}
// 第三部分
s.append(str.substring(end + 1));
return s.toString();
}
}
運(yùn)行結(jié)果:
反轉(zhuǎn)后為:ashgfdj
注:在方式三中,僅是字符串反轉(zhuǎn)操作,不需要考慮線程安全問題,所以優(yōu)先選擇StringBuilder
附實(shí)戰(zhàn)例子
對字符串中指定的部分進(jìn)行旋轉(zhuǎn),如str="mmabcdfeffnn",指定abcdfeff部分進(jìn)行旋轉(zhuǎn),則得到字符串str="mmffefdcbann"。
其實(shí)現(xiàn)的思路,我是這樣的:將源字符串分為三部分,頭,待旋轉(zhuǎn),尾,其中這三部分都需要進(jìn)行采取截取的操作,而對于待旋轉(zhuǎn)的部分,這里采用了一個(gè)技巧,那就是借用了StringBuffer(String string)作為中介,并調(diào)用其中的reverse()方法進(jìn)行旋轉(zhuǎn)。最后得到的三部分:頭,已旋轉(zhuǎn),尾,進(jìn)行連接concat(String string)操作即可。
代碼如下:
/**
* 字符串指定的部分進(jìn)行反轉(zhuǎn)
* @author zhonglinsen
* 2016-3-1 下午
*/
public class StringReverse {
public static void main(String[] args) {
String str="mmabcdefnn";
int start=2;
int end=7;
System.out.println("原先字符串: "+str);
String strNew=strReverse(str, start, end);
System.out.println("旋轉(zhuǎn)了指定位置后的字符串: "+strNew);
}
public static String strReverse(String strArg,int start,int end){
String strStart=strArg.substring(0,start);
String strEnd=strArg.substring(end+1,strArg.length());
String strSub=strArg.substring(start, end+1);
StringBuffer sb=new StringBuffer(strSub);
strSub=sb.reverse().toString();
return strStart.concat(strSub).concat(strEnd);
}
}總結(jié)
到此這篇關(guān)于Java字符串中指定部分反轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Java字符串指定部分反轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot2結(jié)合mybatis增刪改查的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于spring boot2結(jié)合mybatis增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
java實(shí)現(xiàn)水果超市管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)水果超市管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
關(guān)于maven打包時(shí)的報(bào)錯(cuò): Return code is: 501 , ReasonPhrase:HTTPS Requ
這篇文章主要介紹了關(guān)于maven打包時(shí)的報(bào)錯(cuò): Return code is: 501 , ReasonPhrase:HTTPS Required,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
intellij idea 啟動(dòng)tomcat 1099端口被占用的解決
這篇文章主要介紹了intellij idea 啟動(dòng)tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
jasypt SaltGenerator接口定義方法源碼解讀
這篇文章主要為大家介紹了jasypt SaltGenerator接口定義方法源碼解讀,,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法
這篇文章主要介紹了java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法,涉及java針對文件操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08
Jackson 反序列化時(shí)實(shí)現(xiàn)大小寫不敏感設(shè)置
這篇文章主要介紹了Jackson 反序列化時(shí)實(shí)現(xiàn)大小寫不敏感設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

