私はユーザーからString
入力を得るためにJavaを使っています。この入力の最初の文字を大文字にしようとしています。
私はこれを試しました:
String name;
BufferedReader br = new InputStreamReader(System.in);
String s1 = name.charAt(0).toUppercase());
System.out.println(s1 + name.substring(1));
これらは、これらのコンパイラエラーにつながりました:
型が一致しません:InputStreamReaderからBufferedReaderに変換できません
プリミティブ型charで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);
}
String name = "stackoverflow";
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();
name
の値は"Stackoverflow"
です
ステップ1:
これをbuild.gradle
依存関係に入れて、Apacheの共通言語ライブラリをインポートします。
compile 'org.Apache.commons:commons-lang3:3.6'
ステップ2:
あなたの文字列がすべて小文字であること、あるいはあなたが最初の文字を初期化することだけが必要であることが確実であるならば、直接に電話をしてください。
StringUtils.capitalize(yourString);
enum
の場合のように、最初の文字だけを大文字にするようにしたい場合は、最初にtoLowerCase()
を呼び出し、入力文字列がnullの場合はNullPointerException
がスローされることに注意してください。
StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());
これがApacheによって提供されたより多くのサンプルです。例外はありません
StringUtils.capitalize(null) = null
StringUtils.capitalize("") = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"
注:
WordUtils
もこのライブラリに含まれていますが、非推奨です。 使わないでください。
あなたがやりたいことはおそらくこれです:
s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
(最初の文字を大文字に変換し、元の文字列の残りを追加します)
また、入力ストリームリーダーを作成しますが、どの行も読み取らないでください。したがって、name
は常にnull
になります。
これはうまくいくはずです。
BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
以下の解決策はうまくいくでしょう。
String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow
プリミティブcharに対してtoUpperCase()を使用することはできませんが、最初に文字列全体を大文字にしてから最初の文字を取得し、次に上のように部分文字列に追加することができます。
WordUtils.capitalize(str)
を使用してください。
Javaユーザーの場合
すべての文字列を大文字にするための単純なヘルパーメソッドです。
public static String capitalize(String str)
{
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
その後はstr = capitalize(str)
を呼び出してください。
Kotlinユーザーのために単に電話してください:
str.capitalize()
文字列を小文字に設定してから、次のように最初の文字を大文字に設定します。
userName = userName.toLowerCase();
それから最初の文字を大文字にする:
userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();
部分文字列は単により大きな文字列の一部を取得しているだけなので、それらを組み合わせています。
最短も:
String message = "my message";
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message) // Will output: My message
私のために働きました。
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
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);
}
}
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));
これを行うにはsubstring()
を使用できます。
しかし、2つの異なるケースがあります。
ケース1
大文字にしているString
が人間が読める形式であることを意図している場合は、デフォルトのロケールも指定する必要があります。
String firstLetterCapitalized =
myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);
ケース2
大文字にするString
が機械可読であることを意図している場合は、返されるストリングが異なる地域間で矛盾するため、Locale.getDefault()
を使用しないでください。この場合は常に同じロケールを指定します(たとえば、toUpperCase(Locale.ENGLISH)
)。これにより、内部処理に使用している文字列の一貫性が保証され、見つけにくいバグを回避できます。
注:自動的に行われるので、Locale.getDefault()
にtoLowerCase()
を指定する必要はありません。
これを試してください
この方法で何ができるかということは、「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();
}
Use this utility method to get all first letter in capital.
String captializeAllFirstLetter(String name)
{
char[] array = name.toCharArray();
array[0] = Character.toUpperCase(array[0]);
for (int i = 1; i < array.length; i++) {
if (Character.isWhitespace(array[i - 1])) {
array[i] = Character.toUpperCase(array[i]);
}
}
return new String(array);
}
与えられた答えは一つの言葉の最初の文字だけを大文字にすることです。文字列全体を大文字にするには、次のコードを使用します。
public static void main(String[] args) {
String str = "this is a random string";
StringBuilder capitalizedString = new StringBuilder();
String[] splited = str.trim().split("\\s+");
for (String string : splited) {
String s1 = string.substring(0, 1).toUpperCase();
String nameCapitalized = s1 + string.substring(1);
capitalizedString.append(nameCapitalized);
capitalizedString.append(" ");
}
System.out.println(capitalizedString.toString().trim());
}
出力:This Is A Random String
次のコードを使うことができます。
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);
}
これは単にあなたにそれを見せることです、あなたはそれほど間違っていなかったということです。
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));
注意:これはそれをするためのまったく最良の方法ではありません。これはcharAt()
を使ってもできることをOPに示すためだけのものです。 ;)
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();
}
これも試すことができます。
String s1 = br.readLine();
char[] chars = s1.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
s1= new String(chars);
System.out.println(s1);
これは部分文字列を使用するよりも優れています(最適化されています)。 (ただし、小さい文字列については心配しないでください)
これはうまくいくでしょう
char[] array = value.toCharArray();
array[0] = Character.toUpperCase(array[0]);
String result = new String(array);
System.out.println(Character.toString(A.charAt(0)).toUpperCase()+A.substring(1));
P.S = aは文字列です。
次のコードを使うことができます。
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でのテスト例:
@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"));
}
文字列内の各Wordの最初の文字を大文字にするには、
最初に、あなたは以下のようにsplitメソッドを使用してスペースがあるこの分割文字列のためにその文字列&の各単語を取得し、それぞれの単語を配列に格納する必要があります。次に空の文字列を作成します。その後substring()メソッドを使用して、対応するWordの最初の文字と残りの文字を取得し、それらを2つの異なる変数に格納します。
次に、toUpperCase()メソッドを使用して、最初の文字を大文字にし、その空の文字列に次のように残りの文字を追加します。
public class Test {
public static void main(String[] args)
{
String str= "my name is khan"; // string
String words[]=str.split("\\s"); // split each words of above string
String capitalizedWord = ""; // create an empty string
for(String w:words)
{
String first = w.substring(0,1); // get first character of each Word
String f_after = w.substring(1); // get remaining character of corresponding Word
capitalizedWord += first.toUpperCase() + f_after+ " "; // capitalize first character and add the remaining to the empty string and continue
}
System.out.println(capitalizedWord); // print the result
}
}
私が投稿したコードでは、文字列からアンダースコア(_)記号と余分なスペースが削除され、文字列内のすべての新しいWordの最初の文字が大文字になります。
private String capitalize(String txt){
List<String> finalTxt=new ArrayList<>();
if(txt.contains("_")){
txt=txt.replace("_"," ");
}
if(txt.contains(" ") && txt.length()>1){
String[] tSS=txt.split(" ");
for(String tSSV:tSS){ finalTxt.add(capitalize(tSSV)); }
}
if(finalTxt.size()>0){
txt="";
for(String s:finalTxt){ txt+=s+" "; }
}
if(txt.endsWith(" ") && txt.length()>1){
txt=txt.substring(0, (txt.length()-1));
return txt;
}
txt = txt.substring(0,1).toUpperCase() + txt.substring(1).toLowerCase();
return txt;
}
答えの1つは95%正解でしたが、私のunitTestで失敗しました@Ameen Maheenの解決策はほぼ完璧でした。ただし、入力が文字列配列に変換される前に、入力をトリミングする必要があります。だから完璧なもの:
private String convertStringToName(String name) {
name = name.trim();
String[] words = name.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();
}
答えの多くは非常に役立つので、私はそれらを使って任意の文字列をタイトルに変換するメソッドを作成しました(最初の文字は大文字)。
static String toTitle (String s) {
String s1 = s.substring(0,1).toUpperCase();
String sTitle = s1 + s.substring(1);
return sTitle;
}
一つのアプローチ.
String input = "someТекст$T%$4čřЭ"; //Enter your text.
if (input == null || input.isEmpty()) {
return "";
}
char [] chars = input.toCharArray();
chars[0] = chars[0].toUpperCase();
String res = new String(chars);
return res;
このメソッドの欠点は、inputStringが長い場合、そのような長さのオブジェクトが3つあることです。あなたと同じ
String s1 = input.substring(1).toUpperCase();
String s2 = input.substring(1, lenght);
String res = s1 + s2;
あるいは
//check if not null.
StringBuilder buf = new StringBuilder(input);
char ch = buf.getCharAt(0).toUpperCase();
buf.setCharAt(0, ch);
return buf.toString();
置換方法を使用してください。
String newWord = Word.replace(String.valueOf(Word.charAt(0)), String.valueOf(Word.charAt(0)).toUpperCase());
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);
}
}
テキスト内の各Wordを大文字にするこのコード!
public String capitalizeText(String name) {
String[] s = name.trim().toLowerCase().split("\\s+");
name = "";
for (String i : s){
if(i.equals("")) return name; // or return anything you want
name+= i.substring(0, 1).toUpperCase() + i.substring(1) + " "; // uppercase first char in words
}
return name.trim();
}
あなたはクラスWordUtilsを使うことができます。
あなたの文字列が "現在の住所"であると仮定し、そして
****強力なテキストWordutils.capitaliz(文字列);出力:現在のアドレス
参照してください: http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/text/WordUtils.html
あなたはこれを試すことができます
/**
* 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("");
}
おかげで私はいくつかのコメントを読みましたそして私は次のようになりました
public static void main(String args[])
{
String myName = "nasser";
String newName = myName.toUpperCase().charAt(0) + myName.substring(1);
System.out.println(newName );
}
幸運を祈っています
Commons.lang.StringUtilsから最良の答えは:
public static String capitalize(String str){
int strLen;
return str!= null &&(strLen = str.length())!= 0? (new StringBuffer(strLen))append(Character.toTitleCase(str.charAt(0)))。append(str.substring(1))。toString():str;
}
stringBufferで文字列をラップするので、私はそれが素晴らしいと思います。同じインスタンスを使用しても、必要に応じてStringBufferを操作できます。
Jorgesysコードを作り直し、文字列の長さに関するケースが少ないため、チェックを少し追加しました。私の場合はnull参照チェックをしないでください。
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();
}
Ameen Mahheenからの答えは良いですが、 "hello world"のように二重のスペースを持つ文字列がある場合、sb.appendはIndexOutOfBounds Exceptionを取得します。やるべき正しいことは、この行の前にテステすることです。
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();
}
さらに別の例として、ユーザー入力の最初の文字を大文字にする方法を次に示します。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
IntStream.of(string.codePointAt(0))
.map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));
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 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
InputがUpperCaseの場合は、以下を使用してください。
strstring(0、1).toUpperCase()+ str.substring(1).toLowerCase();
InputがLowerCaseの場合は、以下を使用してください。
str.substring(0、1).toUpperCase()+ str.substring(1);
import Java.util.*;
public class Program
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String s1=sc.nextLine();
String[] s2=s1.split(" ");//***split text into words***
ArrayList<String> l = new ArrayList<String>();//***list***
for(String w: s2)
l.add(w.substring(0,1).toUpperCase()+w.substring(1));
//***converting 1st letter to capital and adding to list***
StringBuilder sb = new StringBuilder();//***i used StringBuilder to convert words to text***
for (String s : l)
{
sb.append(s);
sb.append(" ");
}
System.out.println(sb.toString());//***to print output***
}
}
私は分割関数を使用して文字列を単語に分割し、再びその単語の最初の文字の大文字を取得するためにリストを取得し、文字列ビルダーを使用して、スペースを含む文字列形式で出力を印刷しました
String s = "first second third fourth";
int j = 0;
for (int i = 0; i < s.length(); i++) {
if ((s.substring(j, i).endsWith(" "))) {
String s2 = s.substring(j, i);
System.out.println(Character.toUpperCase(s.charAt(j))+s2.substring(1));
j = i;
}
}
System.out.println(Character.toUpperCase(s.charAt(j))+s.substring(j+1));