Vic*_*nak 39 java string reverse
我要扭转各个人在Java中的String(不是整个字符串,只是每个人的字)的字.
示例:如果输入String为"Hello World",则输出应为"olleH dlroW".
Wil*_*del 106
这应该可以解决问题.这将迭代源字符串中的每个单词,使用StringBuilder内置reverse()方法反转它,并输出反转的单词.
String source = "Hello World";
for (String part : source.split(" ")) {
System.out.print(new StringBuilder(part).reverse().toString());
System.out.print(" ");
}
Run Code Online (Sandbox Code Playgroud)
输出:
olleH dlroW
Run Code Online (Sandbox Code Playgroud)
注意:评论者已经正确地指出了我认为应该在这里提到的一些事情.此示例将在结果的末尾附加一个额外的空格.它还假设您的单词每个单独的空格分隔,并且您的句子不包含标点符号.
JRL*_*JRL 47
了解你的图书馆;-)
import org.apache.commons.lang.StringUtils;
String reverseWords(String sentence) {
return StringUtils.reverseDelimited(StringUtils.reverse(sentence), ' ');
}
Run Code Online (Sandbox Code Playgroud)
fas*_*ava 23
在split进入单词后,您需要对每个单词执行此操作array.
public String reverse(String word) {
char[] chs = word.toCharArray();
int i=0, j=chs.length-1;
while (i < j) {
// swap chs[i] and chs[j]
char t = chs[i];
chs[i] = chs[j];
chs[j] = t;
i++; j--;
}
return String.valueOf(chs);
}
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 17
这是最简单的解决方案,甚至不使用任何循环.
public class olleHdlroW {
static String reverse(String in, String out) {
return (in.isEmpty()) ? out :
(in.charAt(0) == ' ')
? out + ' ' + reverse(in.substring(1), "")
: reverse(in.substring(1), in.charAt(0) + out);
}
public static void main(String args[]) {
System.out.println(reverse("Hello World", ""));
}
}
Run Code Online (Sandbox Code Playgroud)
即使这是作业,也可以随意复制并作为自己的作品提交.您可以获得额外的功劳(如果您可以解释它是如何工作的)或因抄袭而被抓住(如果您不能).
这里没有人考虑unicode角色.您需要使用java.text.BreakIterator查找单词边界,然后在每个单词边界内使用另一个单词边界来枚举字符边界:
String helloWorld = "He\u0308llo World"; // Hëllo World
StringBuilder reverseStringBuilder = new StringBuilder(helloWorld.length());
BreakIterator wordBreakIterator = BreakIterator.getWordInstance();
wordBreakIterator.setText(helloWorld);
int wordStart = wordIterator.first();
int wordEnd = wordIterator.next();
while (wordEnd != BreakIterator.DONE) {
String word = helloWorld.substring(wordStart,wordEnd);
if (Character.isLetterOrDigit(word.charAt(0))) {
// "Hello" or "World" in our example
BreakIterator characterBreakIterator = BreakIterator.getCharacterInstance();
characterBreakIterator.setText(word);
int characterEnd = characterBreakIterator.last();
int characterStart = characterBreakIterator.previous();
while (characterStart != BreakIterator.DONE) {
reverseStringBuilder.append(word.substring(characterStart, characterEnd));
characterEnd = characterStart;
characterStart = characterBreakIterator.previous();
}
} else {
// " " in our example
reverseStringBuilder.append(word);
}
wordStart = wordEnd;
wordEnd = wordIterator.next();
}
String dlroWolleh = reverseStringBuilder.toString(); // "dlroW ollëH"
Run Code Online (Sandbox Code Playgroud)
使用上面的天真方法会在你反转时将变音符号移到\u0308第一个上面.你希望它保持在上面.lStringe
我是一个C/C++人,练习java面试让我知道是否可以改变或改进.以下允许多个空格和换行符.
第一个是使用StringBuilder
public static String reverse(String str_words){
StringBuilder sb_result = new StringBuilder(str_words.length());
StringBuilder sb_tmp = new StringBuilder();
char c_tmp;
for(int i = 0; i < str_words.length(); i++){
c_tmp = str_words.charAt(i);
if(c_tmp == ' ' || c_tmp == '\n'){
if(sb_tmp.length() != 0){
sb_tmp.reverse();
sb_result.append(sb_tmp);
sb_tmp.setLength(0);
}
sb_result.append(c_tmp);
}else{
sb_tmp.append(c_tmp);
}
}
if(sb_tmp.length() != 0){
sb_tmp.reverse();
sb_result.append(sb_tmp);
}
return sb_result.toString();
}
Run Code Online (Sandbox Code Playgroud)
这个是使用char [].我觉得它效率更高......
public static String reverse(String str_words){
char[] c_array = str_words.toCharArray();
int pos_start = 0;
int pos_end;
char c, c_tmp;
int i, j, rev_length;
for(i = 0; i < c_array.length; i++){
c = c_array[i];
if( c == ' ' || c == '\n'){
if(pos_start != i){
pos_end = i-1;
rev_length = (i-pos_start)/2;
for(j = 0; j < rev_length; j++){
c_tmp = c_array[pos_start+j];
c_array[pos_start+j] = c_array[pos_end-j];
c_array[pos_end-j] = c_tmp;
}
}
pos_start = i+1;
}
}
//redundant, if only java had '\0' @ end of string
if(pos_start != i){
pos_end = i-1;
rev_length = (i-pos_start)/2;
for(j = 0; j < rev_length; j++){
c_tmp = c_array[pos_start+j];
c_array[pos_start+j] = c_array[pos_end-j];
c_array[pos_end-j] = c_tmp;
}
}
return new String(c_array);
}
Run Code Online (Sandbox Code Playgroud)