[英]JAVA - Reverse String without temp String, array, Stringbuilder, substring
我有一個問題問你。 因此,我必須使用此要求反轉String:
然后我試試這個,這是正確的嗎?
String str = "Hello World";
System.out.println("Before : "+str);
for(int i=0;i<str.length();i++){
str = new String(str.getBytes(), 1, str.length()-1-i) + new String(str.getBytes(), 0, 1) + new String(str.getBytes(), str.length()-i, i);
System.out.println(str);
}
System.out.println("After : "+str);
輸出:
之前:Hello World
ello WorldH
llo WorldeH
lo WorldleH
o WorldlleH
WorldolleH
世界olleH
orldW olleH
rldoW olleH
ldroW olleH
dlroW olleH
dlroW olleH
之后:dlroW olleH
您可以使用遞歸來執行任務,如下所示:
public static String reverse(String source, int from) {
if (source.length()-from == 1) {
return source.charAt(from)+"";
}
return reverse(source, from+1) + source.charAt(from);
}
String是java中的不可變類,任何似乎修改它的方法總是會返回一個帶有修改的新字符串對象。 所以答案是,不,你不能在Java中就地反轉String。 Java String是作為char數組的包裝器實現的,它對您是隱藏的(即您只能通過常規方式獲取此數組的副本)。
僅使用:1個變量字符串(用於輸入),1個變量字符串和1個變量int
這意味着,期望的解決方案是:
n
獲取字符,存儲到字符變量。 m
移動到n
(以字符串形式)。 m
。 這是“基本”編程語言的典型問題。 但是Java不允許這樣做,因為它泄漏了根據字符串中的位置設置字符的選項。
雖然這在其他語言中毫無疑問 ,但java沒有選擇根據字符串的索引設置值。
public static String reverse(String str){
char c;
int i = 0;
for (i=0; i< str.length() / 2; i++){
c = str.charAt(i);
//this would be required to match your requirements.
str[i] = str.charAt(str.length() -1 -i);
str[str.length() -1 -i] = c;
}
return str;
}
但在java中,你只能這樣做:
public static String reverse(String str){
char c;
int i = 0;
for (i=0; i< str.length() / 2; i++){
c = str.charAt(i);
char[] temp = str.toCharArray();
temp[i] = str.charAt(str.length() -1-i);
temp[str.length() -1 -i] = c;
str = new String(temp);
}
return str;
}
這會創建額外的char
數組和新的String
對象...即使你可以通過將它聲明for
-loop而將其降低到一個額外的char數組,它也不再符合要求。
我認為設計這個問題的人正在思考“C”或“php”,其中基於索引的字符串訪問是可能的。
如果一個String等於一個char數組(它在一些較舊的語言中,它可能是這個練習的起源),它將如下所示:
public static char[] reverse(char[] str){
char c;
int i = 0;
for (i=0; i< str.length / 2; i++){
c = str[i];
str[i] = str[str.length -1-i];
str[str.length -1 -i] = c;
}
return str;
}
不使用任何集合,StringBulider,StringBuffer或temp數組反轉字符串。 簡單明快:
public static void main(String[] args) {
String test = "Hello World";
String rev = "";
Pattern p = Pattern.compile("[\\w|\\W]");
Matcher m = p.matcher(test);
while (m.find()) {
rev = m.group()+rev;
}
System.out.println("Reverse==" + rev);
}
產量
反向== dlroW olleH
希望能幫助到你 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.