জাভাতে কোনও স্ট্রিংয়ের প্রথম অক্ষরকে কীভাবে মূলধন করবেন?


304

Stringব্যবহারকারীর কাছ থেকে ইনপুট পেতে আমি জাভা ব্যবহার করছি । আমি এই ইনপুটটির প্রথম চিঠিটি মূলধন করার চেষ্টা করছি।

আমি এটি চেষ্টা করেছি:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

যা এই সংকলক ত্রুটির দিকে পরিচালিত করে:

  • অমিল টাইপ করুন: ইনপুট স্ট্রিমরিডার থেকে বাফারডারিডার রূপান্তর করতে পারে না

  • আদিম টাইপের চরে আপ্পেরকে () -তে আবেদন করা যাবে না


2
@ পন্টাস - আমি একমত নই "Abcd" ইনপুটটির জন্য, ওপি "Abcd" আউটপুট চায়। এটি বেশ পরিষ্কার বলে মনে হচ্ছে, যদিও প্রশ্নটি আরও ভাল হতে পারে।
কোবি


অক্ষর জাভা মধ্যে একটি প্রাথমিক তথ্য প্রকার। আপনি ডট (।) অপারেটরের সাথে কোনও আদিম ডেটা প্রকারকে অবজ্ঞা করতে পারবেন না। আপনাকে নামের সাথে প্রথম অক্ষরটি বিস্তৃত করতে হবে ubসুবস্ট্রিং (0,1);
দিবাকর রাজেশ

উত্তর:


397
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);
}

1
আমার মনে হয় str.leth () এর পরে আপনার -1 দরকার, অন্যথায় আপনি সীমার বাইরে চলে যাবেন।
দত্ত

@ দত্ত: না, আসলে এটিও বেশ ভাল ছিল। তবে রেকিনের পরিবর্তন এটিকে নিখুঁত করে তুলেছে। ;)
আদিল আনসারী

কমন্স ল্যাং আপনার নিজের ফাংশনটি লেখার চেয়ে সর্বদা ভাল যেখানে আপনি আরও ভাল জানেন এমন ঘটনা বাদে। আপনি যদি মূলধন ফাংশনে কমন্স ল্যাং জাভা ডকটি না পড়েন তবে আপনার নিজের লেখা উচিত হবে না।
দ্য লাফিং.ম্যান

211

আমি ওয়ার্ড ইউটিস ব্যবহার করছিলাম এটির একই কার্যকারিতা রয়েছে তবে এটি একটি বাক্যে সমস্ত শব্দের প্রথম অক্ষরকে বড় করে তোলে।
সুরভিত রাও

StringUtils.capitalize( "fred from jupiter" );উত্পাদন "Fred from jupiter"। সহজ ...: ডি
uololine

ওয়ার্ড ইউটিলস.ক্যাপিটালাইজ ফুলি () যেমনটি দেয় তেমন আমার জন্য কাজ করেছে: ওয়ার্ডটেলস.ক্যাপিটালাইফুলি ("আমি ফাইন আছি") = "আমি ভাল"
অতুল শর্মা

91

একটি স্ট্রিংয়ের প্রথম চিঠিটি মূলধন করতে সংক্ষিপ্ত / দ্রুত সংস্করণ কোডটি হ'ল:

String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

মান nameহয়"Stackoverflow"


4
আমি এই সমাধানটি পছন্দ করি কারণ এটি নিশ্চিত করে যে বাকী স্ট্রিং লোয়ার-কেস। ALL_CAPS এনাম নামগুলি থেকে রূপান্তর করার সময় আমার এটির প্রয়োজন ছিল।
এলেন স্পার্টাস

54

অ্যাপাচি এর সাধারণ গ্রন্থাগার ব্যবহার করুন। এই স্টাফগুলি থেকে আপনার মস্তিষ্ককে মুক্ত করুন এবং নাল পয়েন্টার এবং সূচিগুলি সীমানা ব্যতিক্রমগুলি এড়িয়ে যান

ধাপ 1:

এটিকে build.gradleনির্ভরতাতে রেখে এপাচের সাধারণ ল্যাং গ্রন্থাগারটি আমদানি করুন

compile 'org.apache.commons:commons-lang3:3.6'

ধাপ ২:

আপনি যদি নিশ্চিত হন যে আপনার স্ট্রিংটি সমস্ত নিম্নতর, বা আপনার কেবলমাত্র প্রথম অক্ষরটি আরম্ভ করার জন্য, সরাসরি কল করুন

StringUtils.capitalize(yourString);

আপনি যদি নিশ্চিত করতে চান যে কেবলমাত্র প্রথম অক্ষরটি মূলধন হয়ে গেছে, যেমন এটির জন্য এটি করা enum, toLowerCase()প্রথমে কল করুন এবং মনে রাখবেন যে NullPointerExceptionযদি ইনপুট স্ট্রিংটি নাল থাকে তবে এটি নিক্ষেপ করবে ।

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

এখানে অ্যাপাচি দ্বারা সরবরাহিত আরও নমুনা রয়েছে। এটা ব্যতিক্রম বিনামূল্যে

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

বিঃদ্রঃ:

WordUtilsএছাড়াও এই লাইব্রেরিতে অন্তর্ভুক্ত করা হয়েছে, তবে হ্রাস করা হয়েছে। দয়া করে এটি ব্যবহার করবেন না


2
ধন্যবাদ। আমি বিশ্বাস করতে পারি না লোকেরা এমনকি এই ধরণের কাজের জন্য লুপ ব্যবহার করার কথা চিন্তা করে
Alvaro

@ আলভারো, দিনের শেষে - লোকেরা এই কাজের জন্য লুপ ব্যবহার করে, অ্যাপাচি উত্স কোডটি পরীক্ষা করে। এর অর্থ এই নয় যে লোকেরা যদিও ভালভাবে পরীক্ষিত সমাধানগুলি ব্যবহার না করে।
ইউরি চেরনিশভ

@ ইউরি চের্নিশভ নিশ্চিত, আমার অর্থ হ'ল তারা বেশিরভাগ অংশের জন্য উত্পাদন কোডের জন্য চাকাটি পুনর্বহাল করা উচিত নয়
আলভারো

ওয়ার্ড ইউটিলস.ক্যাপিটালাইজ ফুলি () যেমনটি দেয় তেমন আমার জন্য কাজ করেছে: ওয়ার্ড ইউটিলস.ক্যাপিটালাইফুলি ("আমি ফাইন আছি") = "আমি ভাল"
অতুল শর্মা

আমি কখনই সামান্য উদ্দেশ্যে যেমন বাহ্যিক লাইব্রেরিতে যাব না How to capitalize the first letter of a String in Java?
স্ট্যাক ওভারফ্লো

24

জাভা:

প্রতিটি স্ট্রিং মূলধনের জন্য কেবল একটি সহায়ক পদ্ধতি।

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

এর পরে কেবল কল করুন str = capitalize(str)


Kotlin:

str.capitalize()

এটি strবাতিল হলে এটি ব্যতিক্রম ছুঁড়ে ফেলবে । স্ট্রিংটি নাল নয় এবং এটি ব্যবহারের আগে কমপক্ষে একটি অক্ষর রয়েছে তা পরীক্ষা করুন।
অ্যাটমোসিয়ান

@ অ্যাটাকোমিশিয়ান আপনি ঠিক বলেছেন, আমি জাভা কোড আপডেট করি এবং কোটলিনের জন্য আপনি স্ট্র?। ক্যাপিটালাইজ () ব্যবহার করতে পারেন
আমির হোসেন Ghasemi

22

আপনি যা করতে চান তা সম্ভবত:

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);

16

ওহে! আপনি কীভাবে আমার প্রকল্পে এটি বাস্তবায়ন করতে পারেন দয়া করে ব্যাখ্যা করতে পারেন? আমি আপনার ইউআরএলে যে কোনও ফাইল ডাউনলোড লিঙ্ক দেখতে পাচ্ছি। ধন্যবাদ
গ্রেফক্স

এই পদ্ধতিটি হ্রাস করা হয়। দয়া করে কমন্স-ল্যাং থেকে স্ট্রিংগটিলগুলি ব্যবহার করুন
ফ্যানমাং

12

নীচে সমাধান কাজ করবে।

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

আদিম চরে আপনি আপারকেস () ব্যবহার করতে পারবেন না, তবে আপনি প্রথমে পুরো স্ট্রিংটিকে বড় হাতের অক্ষরে তৈরি করতে পারেন তারপরে উপরে বর্ণিত স্ট্রিংগুলিতে সংযোজন করতে প্রথমে প্রথমে চারটি নিতে পারেন।


toUpperCase প্রশ্নে সীমাবদ্ধ।
হরপ্রীত সন্ধু - TheRootCoder

প্রশ্নে, তিনি আদিম উপরের আপেরকেসে চেষ্টা করার চেষ্টা করেছিলেন যা কাজ করবে না।
জিজিল কাক্কাদাথু

1
উহু. আমি সেই জিনিসটি মিস করেছি। (y)
হরপ্রীত সন্ধু - TheRootCoder

1
দুর্দান্ত উত্তর প্রিয়
দুলাজ কুলাথুঙ্গা


7

সবচেয়ে ছোট:

String message = "my message";    
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message)    // Will output: My message

আমার জন্য কাজ করেছেন।


6

স্ট্রিংটি নিম্ন কেসিতে সেট করুন, তারপরে প্রথম অক্ষরটিকে এটির উপরের হিসাবে সেট করুন:

    userName = userName.toLowerCase();

তারপরে প্রথম চিঠিটি মূলধন করতে:

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();

সাবস্ট্রিং কেবল একটি বৃহত্তর স্ট্রিংয়ের একটি টুকরা পাচ্ছে, তারপরে আমরা এগুলি আবার একত্রিত করছি।


7
আমি কীভাবে এটি পাই, কোডের প্রথম লাইনটি অকেজো, কেননা বাকী স্ট্রিংটি যে কোনও উপায়ে ছোট আকারে সেট করা থাকে।
হাভার্ড নাইগার্ড

6

ওয়ার্ডটেলস.ক্যাপিটালাইজ ফুল () সম্পর্কে কী ?

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);
    }
}

6

রাজধানীতে সমস্ত প্রথম অক্ষর পেতে এই ইউটিলিটি পদ্ধতিটি ব্যবহার করুন।

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);
}


4

আপনি এটি ব্যবহার করে দেখতে পারেন:

 String s1 = br.readLine();
 char[] chars = s1.toCharArray();
 chars[0] = Character.toUpperCase(chars[0]);
 s1= new String(chars);
 System.out.println(s1);

এটি স্ট্রিং ব্যবহারের চেয়ে ভাল (অনুকূলিত)। (তবে ছোট স্ট্রিং নিয়ে চিন্তা করার দরকার নেই)


4

আপনি এটি করতে ব্যবহার করতে পারেন substring()

তবে দুটি ভিন্ন মামলা রয়েছে:

মামলা 1

যদি Stringআপনি মূলধন করছেন তা মানব-পঠনযোগ্য হিসাবে বোঝানো হচ্ছে, আপনার ডিফল্ট লোকেলও নির্দিষ্ট করা উচিত:

String firstLetterCapitalized = 
    myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);

মামলা 2

যদি Stringআপনি, পুঁজি করছে এড়ানোর ব্যবহার মেশিনে পাঠযোগ্য হতে বোঝানো হয় Locale.getDefault()কারণ স্ট্রিংটি বিভিন্ন অঞ্চল জুড়ে অসঙ্গত হবে ফিরিয়ে দেওয়া হয়, এবং এই ক্ষেত্রে সবসময় উদাহরণস্বরূপ (একই লোকেল নির্দিষ্টtoUpperCase(Locale.ENGLISH) )। এটি নিশ্চিত করবে যে আপনি অভ্যন্তরীণ প্রক্রিয়াকরণের জন্য যে স্ট্রিংগুলি ব্যবহার করছেন তা সামঞ্জস্যপূর্ণ, যা আপনাকে খুঁজে পাওয়া কঠিন বাগগুলি এড়াতে সহায়তা করবে।

দ্রষ্টব্য: আপনি উল্লেখ করতে হবে না Locale.getDefault()জন্য toLowerCase()হিসাবে এই স্বয়ংক্রিয়ভাবে সম্পন্ন করা হয়।


4

অ্যান্ড্রয়েড স্টুডিওতে

আপনার উপর এই নির্ভরতা যুক্ত করুন 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));

4

যদি আপনি স্প্রিং ব্যবহার করেন :

import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

দ্রষ্টব্য: আপনার যদি ইতিমধ্যে অ্যাপাচি কমন ল্যাং নির্ভরতা থাকে, তবে অন্যান্য উত্তরের পরামর্শ অনুসারে তাদের স্ট্রিংগিলস.ক্যাপিটালাইজ ব্যবহার করা বিবেচনা করুন।

বাস্তবায়ন: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L53535

আরএফ: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#capitalize-java.lang.String-


4

এটি 101% কাজ করবে

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}

3

এটি কেবল আপনাকে দেখানোর জন্য, আপনি যে ভুল ছিলেন না।

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()পাশাপাশি ব্যবহার করেও করা যেতে পারে । ;)


1
"এটি ভুল নয়" এর জন্য +1। আমি চাই পছন্দ Character.toString(name.charAt(0)) পরিবর্তে ""+name.charAt(0)একটা কাজ যা আমি করতে চাই দেখানোর জন্য।
ব্যবহারকারী 85421

নাল দৈর্ঘ্যের চেক নেই .. দৈর্ঘ্য শূন্য হতে পারে।
ক্রিসপিক্স


3

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

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);

}

3

আর একবার চেষ্টা কর

এই পদ্ধতিটি যা করে তা হ'ল "হ্যালো ওয়ার্ল্ড" শব্দটি বিবেচনা করুন এই পদ্ধতিটি এটিকে "হ্যালো ওয়ার্ল্ড" রূপান্তরিত করে প্রতিটি শব্দের সূচনাকে মূলধন করে।

 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();

    }

তবে এই কোডটি বেশ বোঝা যায় বলে মনে হয়, সমস্ত পদ্ধতিগুলি তাদের নামগুলি দিয়েও বোঝা সহজ।
আমিন মাহিন

একটি যাদুমন্ত্র মত কাজ করে!
দ্য উইন্ডসিল

3

প্রদত্ত উত্তরগুলি কেবলমাত্র একটি শব্দের প্রথম অক্ষরকে মূলধনের জন্য। একটি সম্পূর্ণ স্ট্রিং মূলধন করতে নিম্নলিখিত কোড ব্যবহার করুন।

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


3

যদি ইনপুটটি উচ্চের কেস হয় তবে নিম্নলিখিতগুলি ব্যবহার করুন:

str.substring (0, 1) .toUpperCase () + str.substring (1) .toLowerCase ();

যদি ইনপুটটি লোয়ারকেস হয় তবে নিম্নলিখিতগুলি ব্যবহার করুন:

str.substring (0, 1) .toUpperCase () + str.substring (1);



2
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();
}

2

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

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"));
}

2

ব্যবহার 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;  
}

এটি স্ট্রিংবুফারের সাথে স্ট্রিংটি মোড়ানো করার পরে আমি এটি উজ্জ্বল দেখতে পাচ্ছি। আপনি নিজের ইচ্ছামতো স্ট্রিংবুফার এবং একই উদাহরণ ব্যবহার করার পরেও এটিকে পরিচালনা করতে পারেন।


2

তবুও অন্য একটি উদাহরণ, আপনি কীভাবে ব্যবহারকারীর ইনপুটটির প্রথম অক্ষরকে মূলধন করতে পারেন:

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)));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.