我无法弄清楚如何更改给定名称的顺序。
例如: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)并且它不会显示出来。
答案 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;
编辑: Name1
为Van
,Name2
为Dame 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)
您想要一个方法来转换所有名称或只是名称名称形式的名称?我假设你想要一个所有名字的方法。因为如果您只想反转此特定表单中的名称,则无法检查s1
和s2
的值,您知道s1
和s2
必须是一个正数。如果检查是因为要进行错误检查,那么如果名称不是您想要的格式,则应该抛出异常。如果您想对所有名称执行此操作,则下面是伪代码,您可以自己实现(您的代码包含多个错误,您正在使用Name1
,Name2
,Name3
,但是您从未声明它们并复制变量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
我认为这会奏效。希望你觉得它很有用。