我正在制作一个方法来读取整个类代码并用它做一些事情。
我想要做的是获取方法的名称,并用它创建一个String。
像removeProduct
之类的东西我将制作一个字符串“删除产品”
如何在大写情况下拆分名称方法? 如何构建这个新字符串,每个单词的第一个字母作为大写字母? 我正在使用子字符串,有更简单,更好的方法吗?
ps:我确信我的巴西英语对标题没有帮助。如果有人能让它看起来更好,我会很感激。答案 0 :(得分:6)
请勿重新发明轮子,请使用commons-lang
中的方法String input = "methodName";
String[] words = StringUtils.splitByCharacterTypeCamelCase(methodName);
String humanised = StringUtils.join(words, ' ');
答案 1 :(得分:4)
您可以使用正则表达式将名称拆分为不同的单词,然后将第一个单词大写:
public static void main(String[] args) {
String input = "removeProduct";
//split into words
String[] words = input.split("(?=[A-Z])");
words[0] = capitalizeFirstLetter(words[0]);
//join
StringBuilder builder = new StringBuilder();
for ( String s : words ) {
builder.append(s).append(" ");
}
System.out.println(builder.toString());
}
private static String capitalizeFirstLetter(String in) {
return in.substring(0, 1).toUpperCase() + in.substring(1);
}
请注意,这需要更好的角落案例处理,例如不在末尾添加空格并处理1个字符的单词。
编辑:我的意思是解释正则表达式。正则表达式(?=[A-Z])
是zero-width assertion (positive lookahead),匹配下一个字符位于“A”和“Z”之间的位置。
答案 2 :(得分:0)
public String convertMethodName(String methodName) {
StringBuilder sb = new StringBuilder().append(Character.toUpperCase(methodName.charAt(0)));
for (int i = 1; i < methodName.length(); i++) {
char c = methodName.charAt(i);
if (Character.isUpperCase(c)) {
sb.append(' ');
}
sb.append(c);
}
return sb.toString();
}
如果您希望稍后为其他情况添加功能(连续多个上限等),以这种方式处理它可能会给您一些更好的控制。基本上,对于每个字符,它只是检查它是否在大写字母的范围内(字符代码65-90,包括),如果是,则在单词开始之前向缓冲区添加一个空格。
编辑:使用Character.isUpperCase()
答案 3 :(得分:0)
您可以分两步完成:
1 - 将字符串的第一个字母设为大写。
2 - 在大写字母前面加一个空格,前面加一个小写字母。
对于步骤1,您可以使用函数;对于步骤2,您可以使用String.replaceAll方法:
String str = "removeProduct";
str = capitalizeFirst(str);
str = str.replaceAll("(?<=[^A-Z])([A-Z])"," $1");
static String capitalizeFirst(String input) {
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
答案 4 :(得分:0)
@MrWiggles是对的。 还有一种方法可以做到这一点,而不是幻想:)
import java.util.StringTokenizer;
public class StringUtil {
public static String captilizeFirstLetter(String token) {
return Character.toUpperCase(token.charAt(0)) + token.substring(1);
}
public static String convert(String str) {
final StringTokenizer st = new StringTokenizer(str,
"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z", true);
final StringBuilder sb = new StringBuilder();
String token;
if (st.hasMoreTokens()) {
token = st.nextToken();
sb.append(StringUtil.captilizeFirstLetter(token) + " ");
}
while (st.hasMoreTokens()) {
token = st.nextToken();
if (st.hasMoreTokens()) {
token = token + st.nextToken();
}
sb.append(StringUtil.captilizeFirstLetter(token) + " ");
}
return sb.toString().trim();
}
public static void main(String[] args) throws Exception {
String words = StringUtil.convert("helloWorldHowAreYou");
System.out.println(words);
}
}