2012-09-26 51 views
1

我是Java新手,想知道如何切换字符串中的单词。在我的程序中,用户将文本输入到字符串中并保存。程序应该将第一个单词移到字符串的末尾。防爆。 “我喜欢猫和讨厌的狗”应该改为“爱猫和讨厌的狗”。字符串操作中的Java字

Scanner in = new Scanner(System.in); 
System.out.println("Please enter at least one thing you love and one thing you hate using the words hate and love: "); 
String loveHate = in.nextLine(); 
+1

您可以将字符串拆分为空格分隔符,然后将数组中的第一个元素弹出到结尾。 – Vulcan

回答

1

编辑: 这是我最初的反应,但在事后@ iccthedral的回答可能是最好的。

一种方法是将文本拆分为单词,然后将第一个单词连接到后面的所有内容的末尾。

String input = "I love cats and hate dogs"; 
String[] words = input.split("\\s+"); 
String firstWord = words[0]; 
StringBuilder everythingAfterFirstWord = new StringBuilder(); 
for(int i = 1 ; i < words.length ; i++){ 
    String word = words[i]; 
    everythingAfterFirstWord.append(word); 
    everythingAfterFirstWord.append(" "); 
} 
String switched = everythingAfterFirstWord + firstWord; 

另一种方法是使用正则表达式。匹配第一个单词和其他所有内容,然后使用String.replaceAll切换这两个组。

String switched = input.replaceAll("^(\\w+)\\s(.*)$", "$2 $1") 
6

This应该让你开始...

一个例子...

int spaceIndex = loveHate.indexOf(" "); //index of a first space character 
String first = loveHate.substring(0, spaceIndex); 
String rest = loveHate.substring(spaceIndex + 1); 

String reversed = rest + " " + first; 
+0

+1对于这种简单的情况,正则表达式比两个子字符串调用矫枉过正,效率更低。 – wolfcastle

+0

@wolfcastle我也这么认为。 – nullpotent

+0

我相信其余的应该是:'loveHate.substring(spaceIndex + 1);'因为我不认为他想要第一个和第二个单词之间的空间。 – ggreiner

2

你可以第一个字与此正则表达式换到最后:

loveHate.replaceAll("(\\w+)(.*)", "$2 $1"); 
0
String ss = "i love you"; 
     String sss=""; 
     String temp=""; 
     String[] ssArr = ss.split("\\s"); 
     for(int i=0; i<ssArr.length; i++) { 
      if(i==0) { 
       temp = ssArr[i]; 
      } 

      else { 
       sss+=ssArr[i]+" "; 
      } 
      if(i==ssArr.length-1) { 
        sss+=temp; 
       } 
     } 
     System.out.println(sss); 

输出:love y ou我