改变单词Java的顺序

时间:2015-05-30 23:54:03

标签: java string

我无法弄清楚如何更改给定名称的顺序。

例如:Van-Dame Claud 结果:Claud Dame-Van

我创建了这个方法,但似乎不正确,有任何建议或者更好的方法吗?

  public String NameInvers(){
String Name, Name = null, Name = null, NameFinal;
    int s1 = getName().indexOf(' ');
    int s2 = getName().indexOf('-');
    if(s1 != 0){
       Name1 = getName().substring(0, s1);
    if(s2 != 0)
    {
    Name2 = getName().substring(s1, s2);
    Name3 = getName().substring(s2);
    }
    NameFinal = Name3 + Name2 + Name1;
    }
    else
        NameFinal = getName();

    return NameFinal;
  }

编辑:在我的Main方法中,我有许多名字。问题是:抛出新的StringIndexOutOfBoundsException(subLen)并且它不会显示出来。

3 个答案:

答案 0 :(得分:3)

首先,您复制变量Name声明三次。我想你想放:

String Name1, Name2 = null, Name3 = null, NameFinal;

而不是:

String Name, Name = null, Name = null, NameFinal;

然后,如果您只有2个名称,中间有-,并且您想要更改其顺序,则可以使用split函数将其分开,找到-的位置。您可以像这样使用它:

String string = "Van-Dame Claud";
String[] divide = string.split("-");
String Name1 = divide[0];
String Name2 = divide[1]; 
String result = Name2 + "-" + Name1;

编辑: Name1VanName2Dame Claud,因此结果为Dame Cloud-Van

我希望它适合你!

答案 1 :(得分:2)

你走了:

public static String reverseName (String name) {

    name = name.trim();

    StringBuilder reversedNameBuilder = new StringBuilder();
    StringBuilder subNameBuilder = new StringBuilder();

    for (int i = 0; i < name.length(); i++) {

        char currentChar = name.charAt(i);

        if (currentChar != ' ' && currentChar != '-') {
            subNameBuilder.append(currentChar);
        } else {
            reversedNameBuilder.insert(0, currentChar + subNameBuilder.toString());
            subNameBuilder.setLength(0);
        }

    }

    return reversedNameBuilder.insert(0, subNameBuilder.toString()).toString();

}

测试:

public static void main(String[] args) {

    printTest("Van-Dame Claud");
    printTest("Victor Hugo");
    printTest("Anna");
    printTest("");

}

private static void printTest(String S) {

    System.out.printf("Reverse name for %s: %s\n", S, reverseName(S));

}

输出:

Reverse name for Van-Dame Claud: Claud Dame-Van
Reverse name for Victor Hugo: Hugo Victor
Reverse name for Anna: Anna
Reverse name for : 

答案 2 :(得分:1)

您想要一个方法来转换所有名称或只是名称名称形式的名称?我假设你想要一个所有名字的方法。因为如果您只想反转此特定表单中的名称,则无法检查s1s2的值,您知道s1s2必须是一个正数。如果检查是因为要进行错误检查,那么如果名称不是您想要的格式,则应该抛出异常。如果您想对所有名称执行此操作,则下面是伪代码,您可以自己实现(您的代码包含多个错误,您正在使用Name1Name2Name3,但是您从未声明它们并复制变量Name声明):

    string finalName = ""
    string [] strs1 = name split by " "
    foreach str1 in strs1
      string [] strs2 = str1 split by "-"
      foreach str2 in strs2
        if str2.first?
          finalName = str2 + " " + finalName
        else
          finalName = str2 + "-" + finalName
        end
      end
   end
   return finalName.substring 0, finalName.length-1 //remove the space at the end

我认为这会奏效。希望你觉得它很有用。