如何在Java中首字母大写string?
我正在使用Java从用户获取一个String
input。 我正在尝试使这个input的第一个字母大写。
我试过这个:
String name; BufferedReader br = new InputStreamReader(System.in); String s1 = name.charAt(0).toUppercase()); System.out.println(s1 + name.substring(1));
这导致了这些编译器错误:
-
types不匹配:无法从InputStreamReader转换到BufferedReader
-
无法在原始typeschar上调用toUppercase()
String str = "java"; String cap = str.substring(0, 1).toUpperCase() + str.substring(1); // cap = "Java"
用你的例子:
public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Actually use the Reader String name = br.readLine(); // Don't mistake String object with a Character object String s1 = name.substring(0, 1).toUpperCase(); String nameCapitalized = s1 + name.substring(1); System.out.println(nameCapitalized); }
StringUtils.capitalize(..)
来自commons-lang
大写string的第一个字母的较短/较快的版本代码是:
String name = "stackoverflow"; name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();
name
的值是"Stackoverflow"
你想要做的可能是这样的:
s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
(将第一个字符转换为大写,并添加原始string的其余部分)
此外,您创build一个inputstream阅读器,但从来没有读过任何一行。 因此, name
将始终为null
。
这应该工作:
BufferedReader br = new InputstreamReader(System.in); String name = br.readLine(); String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
来自Apache Commons的 WordUtils.capitalize(java.lang.String)
。
使用WordUtils.capitalize(str)
。
String str1 = "hello"; str1.substring(0, 1).toUpperCase()+str1.substring(1);
将string设置为小写,然后将第一个字母设置为上面的像这样:
userName = userName.toLowerCase();
然后把第一个字母大写:
userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();
子串只是得到一个较大的string,然后我们把它们组合在一起。
最短也是:
String message = "my message"; message = Character.toUpperCase(message.charAt(0)) + message.substring(1); System.out.println(message) // Will output: My message
为我工作。
在Android Studio中
添加这个依赖到你的build.gradle (Module: app)
dependencies { ... compile 'org.apache.commons:commons-lang3:3.1' ... }
现在你可以使用
String string = "STRING WITH ALL CAPPS AND SPACES"; string = string.toLowerCase(); // Make all lowercase if you have caps someTextView.setText(WordUtils.capitalize(string));
这只是为了告诉你,你没有错。
BufferedReader br = new InputstreamReader(System.in); // Assuming name is not blank String name = br.readLine(); //No more error telling that you cant convert char to string String s1 = (""+name.charAt(0)).toUppercase()); // Or, as Carlos prefers. See the comments to this post. String s1 = Character.toString(name.charAt(0)).toUppercase()); System.out.println(s1+name.substring(1));
注意: 这不是最好的办法。 这只是为了显示OP,它也可以使用charAt()
来完成。 ;)
你也可以试试这个:
String s1 = br.readLine(); char[] chars = s1.toCharArray(); chars[0] = Character.toUpperCase(chars[0]); s1= new String(chars); System.out.println(s1);
这比使用子string更好(优化)。 (但不要担心小string)
你可以使用substring()
来做到这一点。
但是有两种不同的情况:
情况1
如果您正在使用的String
是人类可读的,则还应该指定默认语言环境:
String firstLetterCapitalized = myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);
案例2
如果您正在使用的string是机器可读的,请避免使用Locale.getDefault()
因为返回的string在不同区域之间将不一致,并且在此情况下总是指定相同的区域设置(例如toUpperCase(Locale.ENGLISH)
)。 这将确保您用于内部处理的string是一致的,这将帮助您避免难以发现的错误。
注意:您不必为toLowerCase()
指定Locale.getDefault()
toLowerCase()
,因为这是自动完成的。
看看ACL的WordUtils。
WordUtils.capitalize(“你的string”)==“你的string”
如何将大写字母中的每个第一个字母大写?
public static String capitalizer(final String texto) { // split words String[] palavras = texto.split(" "); StringBuilder sb = new StringBuilder(); // list of word exceptions List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com")); for (String palavra : palavras) { if (excessoes.contains(palavra.toLowerCase())) sb.append(palavra.toLowerCase()).append(" "); else sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" "); } return sb.toString().trim(); }
怎么样WordUtils.capitalizeFully() ?
import org.apache.commons.lang3.text.WordUtils; public class Main { public static void main(String[] args) { final String str1 = "HELLO WORLD"; System.out.println(capitalizeFirstLetter(str1)); // output: Hello World final String str2 = "Hello WORLD"; System.out.println(capitalizeFirstLetter(str2)); // output: Hello World final String str3 = "hello world"; System.out.println(capitalizeFirstLetter(str3)); // output: Hello World final String str4 = "heLLo wORld"; System.out.println(capitalizeFirstLetter(str4)); // output: Hello World } private static String capitalizeFirstLetter(String str) { return WordUtils.capitalizeFully(str); } }
试试这个
这个方法所做的就是把“Hello world”这个方法变成“Hello World”,把每个单词的开头都写成大写。
private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); }
这将工作
char[] array = value.toCharArray(); array[0] = Character.toUpperCase(array[0]); String result = new String(array);
您可以使用下面的代码:
public static void main(String[] args) { capitalizeFirstLetter("java"); capitalizeFirstLetter("java developer"); } public static void capitalizeFirstLetter(String text) { StringBuilder str = new StringBuilder(); String[] tokens = text.split("\\s");// Can be space,comma or hyphen for (String token : tokens) { str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" "); } str.toString().trim(); // Trim trailing space System.out.println(str); }
许多答案是非常有用的,所以我用它们来创build一个方法来将任何string转换为标题(第一个字符大写):
static String toTitle (String s) { String s1 = s.substring(0,1).toUpperCase(); String sTitle = s1 + s.substring(1); return sTitle; }
您可以使用下面的代码:
public static String capitalizeString(String string) { if (string == null || string.trim().isEmpty()) { return string; } char c[] = string.trim().toLowerCase().toCharArray(); c[0] = Character.toUpperCase(c[0]); return new String(c); }
使用JUnit进行示例testing:
@Test public void capitalizeStringUpperCaseTest() { String string = "HELLO WORLD "; string = capitalizeString(string); assertThat(string, is("Hello world")); } @Test public void capitalizeStringLowerCaseTest() { String string = "hello world "; string = capitalizeString(string); assertThat(string, is("Hello world")); }
下面的例子还将特殊字符(例如[/ – ]
public static String capitalize(String text) { char[] stringArray = text.trim().toCharArray(); boolean wordStarted = false; for( int i = 0; i < stringArray.length; i++) { char ch = stringArray[i]; if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '\'') { if( !wordStarted ) { stringArray[i] = Character.toUpperCase(stringArray[i]); wordStarted = true; } } else { wordStarted = false; } } return new String(stringArray); } Example: capitalize("that's a beautiful/wonderful life we have.We really-do") Output: That's A Beautiful/Wonderful Life We Have.We Really-Do
感谢我阅读了一些评论,并带来了以下内容
public static void main(String args[]) { String myName = "nasser"; String newName = myName.toUpperCase().charAt(0) + myName.substring(1); System.out.println(newName ); }
我希望它有助于好运
Ameen Mahheen的答案很好,但是如果我们有一些双倍空间的string,比如“hello world”,那么sb.append会得到IndexOutOfBounds Exception。 正确的做法是在这行之前进行testing:
private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); if (words[i].length() > 0) sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); }
你可以试试这个
/** * capitilizeFirst(null) -> "" * capitilizeFirst("") -> "" * capitilizeFirst(" ") -> "" * capitilizeFirst(" df") -> "Df" * capitilizeFirst("AS") -> "As" * * @param str input string * @return String with the first letter capitalized */ public String capitilizeFirst(String str) { // assumptions that input parameter is not null is legal, as we use this function in map chain Function<String, String> capFirst = (String s) -> { String result = ""; // <-- accumulator try { result += s.substring(0, 1).toUpperCase(); } catch (Throwable e) {} try { result += s.substring(1).toLowerCase(); } catch (Throwable e) {} return result; }; return Optional.ofNullable(str) .map(String::trim) .map(capFirst) .orElse(""); }
您可以使用Class WordUtils。
假设你的string是“当前地址”,然后使用
****强壮的文字Wordutils.capitaliz(String); 输出:当前地址
请参阅: http : //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html
class CapitalizeWords { public static void main(String[] args) { String input ="welcome to kashmiri geeks..."; System.out.println(input); String[] str = input.split(" "); for(int i=0; i< str.length; i++) { str[i] = (str[i]).substring(0,1).toUpperCase() + (str[i]).substring(1); } for(int i=0;i<str.length;i++) { System.out.print(str[i]+" "); } } }
public void capitalizeFirstLetter(JTextField textField) { try { if (!textField.getText().isEmpty()) { StringBuilder b = new StringBuilder(textField.getText()); int i = 0; do { b.replace(i, i + 1, b.substring(i, i + 1).toUpperCase()); i = b.indexOf(" ", i) + 1; } while (i > 0 && i < b.length()); textField.setText(b.toString()); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE); } }
只是重新修复了Jorgesys的代码,并增加了一些检查,因为很less有与string长度有关的情况。 在我的情况下不要做空引用检查。
public static String capitalizeFirstLetter(@NonNull String customText){ int count = customText.length(); if (count == 0) { return customText; } if (count == 1) { return customText.toUpperCase(); } return customText.substring(0, 1).toUpperCase() + customText.substring(1).toLowerCase(); }
System.out.println(Character.toString(A.charAt(0)).toUpperCase()+A.substring(1));
PS = a是一个string。