如何将指定位置的字符转成大写?
需要查找到空格, 将空格后的一个字符转成大写
// 如何转成 "User Password" ?String str = "user password";
网站找的方法自己改良了下, 感觉有些麻烦, 有没有更优的方案?
private static String getEnglish(String originalKey) { StringBuilder result = new StringBuilder();
String[] arr = originalKey.split(" ");
for (String item : arr) {
result.append(item.substring(0, 1).toUpperCase()).append(item.substring(1)).append(" ");
}
return result.toString().trim();
}
回答:
来用正则表达式
package playground.sf.q1010000042250246;import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) {
final String s = "hello world. How are you.";
System.out.println(capitalCase(s));
}
private static String capitalCase(String s) {
var m = Pattern.compile("(?<=^|\\s)[a-z]").matcher(s);
StringBuilder builder = new StringBuilder();
while (m.find()) {
m.appendReplacement(builder, m.group().toUpperCase());
}
return m.appendTail(builder).toString();
}
}
逐一遍历法
private static String capitalCase(String s) { StringBuilder builder = new StringBuilder(s);
char last = ' ';
for (int i = 0; i < s.length(); last = builder.charAt(i++)) {
if (!Character.isSpaceChar(last)) { continue; }
char ch = builder.charAt(i);
if (!Character.isSpaceChar(ch)) {
builder.setCharAt(i, Character.toUpperCase(ch));
}
}
return builder.toString();
}
查找法
private static String capitalCase(String s) { if (s.length() <= 1) { return s.toUpperCase(); }
StringBuilder builder = new StringBuilder();
builder.append(Character.toUpperCase(s.charAt(0)));
int start = 1;
while (start > 0) {
int end = s.indexOf(' ', start);
if (end <= 0) {
builder.append(s, start, s.length());
break;
}
while (Character.isSpaceChar(++end));
builder.append(s, start, end);
builder.append(Character.toUpperCase(s.charAt(end++)));
start = end;
}
return builder.toString();
}
回答:
因为小写字母比大写字母的ascii码值大32,所以减去32即可得到大写字母,当然这种写法首字母必须是小写才行
String str = "user password"; String[] arr = str.split(" ");
for (int i = 0; i < arr.length; i++) {
char[] chars = arr[i].toCharArray();
chars[0] -= 32;
arr[i] = String.valueOf(chars);
}
回答:
public String convert(Character c, String s) {
StringBuilder out = null;
int i = 0;
int j = -1;
while ((j = indexIn(s, ++j, c)) != -1) {
out = new StringBuilder(s.length() + 4 * c.toString().length());
out.append(firstCharOnlyToUpper(s.substring(i, j)));
out.append(c);
i = j + c.toString().length();
}
return out.append(firstCharOnlyToUpper(s.substring(i))).toString();
}
private int indexIn(CharSequence sequence, int start, char c) {
int length = sequence.length();
for (int i = start; i < length; i++) {
if (sequence.charAt(i) == c) {
return i;
}
}
return -1;
}
private String firstCharOnlyToUpper(String word) {
return word.isEmpty() ? word : Ascii.toUpperCase(word.charAt(0)) + Ascii.toLowerCase(word.substring(1));
}
回答:
for
循环中的 result.trim();
可以去掉
正则的写法
Pattern initialRE = Pattern.compile("\\b\\p{javaLowerCase}"); // 只要开头或空格后的字母则用 (?<=^| )\\p{javaLowerCase}String res = initialRE.matcher("user password").replaceAll(m -> m.group().toUpperCase());
System.out.println(res); // User Password
原始且高性能的写法
char[] cs = "user password".toCharArray();for (int i = 0, len = cs.length; i < len; ++i) {
char c = cs[i];
if (c == ' ') continue;
cs[i] = Character.toTitleCase(c); // 这个支持特殊 unicode 字符,如 dz 是 Dz 而不是 DZ
while (++i < len && cs[i] != ' ');
}
String res = new String(cs);
System.out.println(res); // User Password
回答:
这个简单:
public static void main(String[] args) { String str = "user name";
StringBuilder sb = new StringBuilder("");
String[] s = str.split(" ");
for (int i = 0; i < s.length; i++){
if(StringUtils.isNotEmpty(s[i])){
sb.append(StringUtils.capitalize(s[i])).append(" ");
}
}
System.out.println(sb);
}
运行结果:
以上是 如何将指定位置的字符转成大写? 的全部内容, 来源链接: utcz.com/p/944610.html