Có phương pháp nào để chuyển đổi Chuỗi thành Trường hợp tiêu đề không?


99

Có bất kỳ phương thức tích hợp nào có sẵn để chuyển đổi một chuỗi thành định dạng Title Case không?


3
Mọi người đang đọc câu hỏi này: hãy cẩn thận rằng nhiều câu trả lời được bình chọn hàng đầu ở đây KHÔNG HOẠT ĐỘNG ĐÚNG với tất cả các ngôn ngữ. Bạn cần một thư viện nhận biết i18n để có cách viết hoa tiêu đề chính xác, như ICU4J (xem câu trả lời của Daniel F).
sffc

Câu trả lời:


107

Apache Commons StringUtils.capitalize () hoặc Commons Text WordUtils.capitalize ()

ví dụ: WordUtils.capitalize("i am FINE") = "I Am FINE"từ tài liệu WordUtils


14
WordUtils.capitalizeFully () là tốt hơn cho tôi vì nó mang lại: WordUtils.capitalizeFully ( "I am fine") = "I Am Fine"
theINtoy

2
Chỉ là một bản cập nhật nhỏ, WordUtils đã biến mất thành Commons Text và không được dùng nữa bên trong Commons Lang
msrd0

Mùa xuân cũng cóStringUtils.capitalise()
OrangeDog

Ý bạn là @OrangeDog capitalize()?
TylerH

@TylerH vâng, tự động sửa lỗi đã xảy ra
OrangeDog

60

Không có phương thức capitalize () hoặc titleCase () nào trong lớp String của Java. Bạn có hai lựa chọn:

 StringUtils.capitalize(null)  = null
 StringUtils.capitalize("")    = ""
 StringUtils.capitalize("cat") = "Cat"
 StringUtils.capitalize("cAt") = "CAt"
 StringUtils.capitalize("'cat'") = "'cat'"
  • write (một phương thức khác) static helper toTitleCase ()

Thực hiện mẫu

public static String toTitleCase(String input) {
    StringBuilder titleCase = new StringBuilder(input.length());
    boolean nextTitleCase = true;

    for (char c : input.toCharArray()) {
        if (Character.isSpaceChar(c)) {
            nextTitleCase = true;
        } else if (nextTitleCase) {
            c = Character.toTitleCase(c);
            nextTitleCase = false;
        }

        titleCase.append(c);
    }

    return titleCase.toString();
}

Testcase

    System.out.println(toTitleCase("string"));
    System.out.println(toTitleCase("another string"));
    System.out.println(toTitleCase("YET ANOTHER STRING"));

kết quả đầu ra:

Chuỗi
Chuỗi khác
CÓ MỘT DÒNG KHÁC

1
Đây là một quy trình nhỏ hay, nhưng nó không thành công đối với trường hợp tổng quát hơn trong đó các Chuỗi có thể đại diện cho tên. Trong trường hợp này, viết hoa cũng sẽ cần phải xuất hiện sau dấu nháy đơn và dấu gạch nối. Ví dụ. O'Connor và J. Wilkes-Booth. Tất nhiên, các ngôn ngữ khác có thể có thêm các quy tắc viết hoa tiêu đề.
scottb

... Nếu nó sẽ bao gồm điều đó, nó sẽ không cần tra cứu toàn bộ từ điển chỉ để tìm ra từ hiện tại có phải là tên không? Điều đó có vẻ hơi nhiều đối với bất kỳ phương pháp nào.
MMJZ

Mã này gần như ổn vì một số tên có thể có tiền tố như de, del, della, dei, da như trong Maria del Carmen, Maria da Silva, Maria della Salute, v.v. coderanch.com/t/35096/Programming/…
Junior Mayhé

Điều này không phá vỡ với dấu nháy đơn? Còn về O'Brian chẳng hạn.
gerketboy

1
Lưu ý: để tránh thay đổi kích thước của nội bộ được sử dụng char[]trong StringBuildertôi khuyên bạn nên sử dụngnew StringBuilder(input.length())
Lino - Bỏ phiếu không nói Cảm ơn

38

Nếu tôi có thể đưa ra giải pháp ...

Phương pháp sau đây dựa trên phương pháp mà dfa đã đăng. Nó thực hiện thay đổi lớn sau (phù hợp với giải pháp tôi cần vào thời điểm đó): nó buộc tất cả các ký tự trong chuỗi đầu vào thành chữ thường trừ khi nó được đặt ngay trước "dấu phân cách có thể hành động" trong trường hợp đó ký tự bị ép buộc chữ hoa.

Một hạn chế lớn trong thói quen của tôi là nó tạo ra giả định rằng "tiêu đề trường hợp" được xác định đồng nhất cho tất cả các ngôn ngữ và được đại diện bởi cùng một quy ước trường hợp mà tôi đã sử dụng và vì vậy nó ít hữu ích hơn mã của dfa về mặt đó.

public static String toDisplayCase(String s) {

    final String ACTIONABLE_DELIMITERS = " '-/"; // these cause the character following
                                                 // to be capitalized
    
    StringBuilder sb = new StringBuilder();
    boolean capNext = true;

    for (char c : s.toCharArray()) {
        c = (capNext)
                ? Character.toUpperCase(c)
                : Character.toLowerCase(c);
        sb.append(c);
        capNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0); // explicit cast not needed
    }
    return sb.toString();
}

GIÁ TRỊ THỬ NGHIỆM

một chuỗi

maRTin o'maLLEY

john wilkes-booth

CÓ MỘT DÒNG KHÁC

ĐẦU RA

Một chuỗi

Martin O'Malley

John Wilkes-Booth

Tuy nhiên, một chuỗi khác


sẽ không hoạt động với các chữ ghép như lj, có chữ hoa là LJ nhưng chữ tiêu đề là Lj. Sử dụng Character.toTitleCasethay thế.
mihi

@mihi: cũng sẽ không hoạt động với các quy tắc chuyên biệt khác, ví dụ: họ chẳng hạn như McNamara hoặc MacDonald.
scottb

nhưng những trường hợp này vốn dĩ không thể sửa được. Việc sử dụng chức năng chuyển đổi chữ hoa / thường đúng (chữ hoa tiêu đề được dùng để viết hoa một từ chứ không phải chữ hoa, theo quy tắc Unicode) có thể được thực hiện (và rất dễ dàng).
mihi

Sẽ không (sẽ không) điều này cũng khiến "của cô ấy" trở thành "Của cô ấy"?
allicarn

Đúng rồi. Điều này hoạt động tốt trên các trường tên nhưng, như bạn chỉ ra, không phải trên văn xuôi chung chung. Nó thậm chí sẽ không hoạt động tốt với tất cả các tên, đặc biệt là Vulcans (T'Pau thay vì T'pau).
scottb

20

Sử dụng WordUtils.capitalizeFully () từ Apache Commons.

WordUtils.capitalizeFully(null)        = null
WordUtils.capitalizeFully("")          = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"

1
Giải pháp tốt! Cảm ơn! Nhưng điều này không hoạt động 100% thời gian, vì nó cũng viết hoa, ví dụ: "a" trong tiêu đề này: "Đây là một Tiêu đề". Xem english.stackexchange.com/questions/14/… . Bạn có biết thư viện nào giải quyết vấn đề này không?
Eirik W

10

Bạn có thể sử dụng các lang của apache commons như sau:

WordUtils.capitalizeFully("this is a text to be capitalize")

bạn có thể tìm thấy tài liệu java tại đây: WordUtils.capitalizeFully java doc

và nếu bạn muốn xóa các khoảng trắng giữa các thế giới, bạn có thể sử dụng:

StringUtils.remove(WordUtils.capitalizeFully("this is a text to be capitalize")," ")

bạn có thể tìm thấy tài liệu java cho String StringUtils.remove java doc

tôi hy vọng điều này giúp đỡ.


5

Nếu bạn muốn có câu trả lời chính xác theo chuẩn Unicode mới nhất, bạn nên sử dụng icu4j.

UCharacter.toTitleCase(Locale.US, "hello world", null, 0);

Lưu ý rằng đây là ngôn ngữ nhạy cảm.

Tài liệu Api

Thực hiện


Cũng xem Bản đồ trường hợp API ICU4J mới hơn: icu-project.org/apiref/icu4j/com/ibm/icu/text/…
sffc

Cũng có sẵn trong API Android cấp 24: developer.android.com/reference/android/icu/lang/…
sffc

3

Đây là một cách khác dựa trên câu trả lời của @ dfa và @ scottb xử lý mọi ký tự không phải chữ cái / chữ số:

public final class TitleCase {

    public static String toTitleCase(String input) {

        StringBuilder titleCase = new StringBuilder(input.length());
        boolean nextTitleCase = true;

        for (char c : input.toLowerCase().toCharArray()) {
            if (!Character.isLetterOrDigit(c)) {
                nextTitleCase = true;
            } else if (nextTitleCase) {
                c = Character.toTitleCase(c);
                nextTitleCase = false;
            }
            titleCase.append(c);
        }

        return titleCase.toString();
    }

}

Đầu vào đã cho:

MARY ÄNN O'CONNEŽ-ŠUSLIK

đầu ra là

Mary Änn O'Connež-Šuslik


2

Đây là thứ tôi đã viết để chuyển đổi solid_case thành LowerCamelCase nhưng có thể dễ dàng điều chỉnh dựa trên các yêu cầu

private String convertToLowerCamel(String startingText)
{
    String[] parts = startingText.split("_");
    return parts[0].toLowerCase() + Arrays.stream(parts)
                    .skip(1)
                    .map(part -> part.substring(0, 1).toUpperCase() + part.substring(1).toLowerCase())
                    .collect(Collectors.joining());
}

Câu trả lời của bạn hoạt động như một sự quyến rũ, tuy nhiên, giải pháp dường như không xử lý chuỗi từ đơn lẻ, có thể là điều kiện if đủ.
yashgarg1232

1

Tôi biết đây là phương pháp cũ hơn, nhưng không có câu trả lời đơn giản, tôi cần phương pháp này để viết mã của mình nên tôi đã thêm vào đây, đơn giản để sử dụng.

public static String toTitleCase(String input) {
    input = input.toLowerCase();
    char c =  input.charAt(0);
    String s = new String("" + c);
    String f = s.toUpperCase();
    return f + input.substring(1);
}

1

Tôi gặp sự cố này và tôi đã tìm kiếm nó, sau đó tôi đã tạo phương pháp của riêng mình bằng cách sử dụng một số từ khóa java chỉ cần chuyển biến String làm tham số và nhận đầu ra dưới dạng String thích hợp.

public class Main
{
  public static void main (String[]args)
  {
    String st = "pARVeEN sISHOsIYA";
    String mainn = getTitleCase (st);
      System.out.println (mainn);
  }


  public static String getTitleCase(String input)
  {
    StringBuilder titleCase = new StringBuilder (input.length());
    boolean hadSpace = false;
    for (char c:input.toCharArray ()){
        if(Character.isSpaceChar(c)){
            hadSpace = true;
            titleCase.append (c);
            continue;
        }
        if(hadSpace){
            hadSpace = false;
            c = Character.toUpperCase(c);
            titleCase.append (c);
        }else{
            c = Character.toLowerCase(c);
            titleCase.append (c);
        }
    }
    String temp=titleCase.toString ();
    StringBuilder titleCase1 = new StringBuilder (temp.length ());
    int num=1;
    for (char c:temp.toCharArray ())
        {   if(num==1)
            c = Character.toUpperCase(c);
            titleCase1.append (c);
            num=0;
        }
        return titleCase1.toString ();
    }
}

Ở đây tôi đã không sử dụng phương pháp trim ở bất kỳ đâu vì trong trường hợp của tôi, tôi đã nhận được chuỗi cắt đúng cách.
Parveen Sishodiya

0

bạn rất có thể sử dụng

org.apache.commons.lang.WordUtils

hoặc là

CaseFormat

từ API của Google.


1
Sẽ rất hữu ích nếu bạn thêm phương thức và một ví dụ.
jechaviz

CaseFormat chỉ có các định dạng thường được sử dụng trong số nhận dạng chương trình (UpperCamel, Lower-hypen, UPPER_UNDERSCORE, v.v.) và chỉ hỗ trợ văn bản ASCII. Nó sẽ không hoạt động tốt khi chuyển đổi sang Title Case.
M. Justin

0

Gần đây tôi cũng gặp phải vấn đề này và không may là có nhiều lần xuất hiện tên bắt đầu bằng Mc và Mac, tôi đã sử dụng một phiên bản mã của scottb mà tôi đã thay đổi để xử lý các tiền tố này nên nó ở đây trong trường hợp bất kỳ ai muốn sử dụng nó.

Vẫn có những trường hợp cạnh mà điều này bỏ sót nhưng điều tồi tệ nhất có thể xảy ra là một chữ cái sẽ là chữ thường khi nó phải được viết hoa.

/**
 * Get a nicely formatted representation of the name. 
 * Don't send this the whole name at once, instead send it the components.<br>
 * For example: andrew macnamara would be returned as:<br>
 * Andrew Macnamara if processed as a single string<br>
 * Andrew MacNamara if processed as 2 strings.
 * @param name
 * @return correctly formatted name
 */
public static String getNameTitleCase (String name) {
    final String ACTIONABLE_DELIMITERS = " '-/";
    StringBuilder sb = new StringBuilder();
    if (name !=null && !name.isEmpty()){                
        boolean capitaliseNext = true;
        for (char c : name.toCharArray()) {
            c = (capitaliseNext)?Character.toUpperCase(c):Character.toLowerCase(c);
            sb.append(c);
            capitaliseNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0);
        }                       
        name = sb.toString();    
        if (name.startsWith("Mc") && name.length() > 2 ) {
            char c = name.charAt(2);
            if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) {
                sb = new StringBuilder();
                sb.append (name.substring(0,2));
                sb.append (name.substring(2,3).toUpperCase());
                sb.append (name.substring(3));
                name=sb.toString();
            }               
        } else if (name.startsWith("Mac") && name.length() > 3) {
            char c = name.charAt(3);
            if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) {
                sb = new StringBuilder();
                sb.append (name.substring(0,3));
                sb.append (name.substring(3,4).toUpperCase());
                sb.append (name.substring(4));
                name=sb.toString();
            }
        }
    }
    return name;    
}

0

Chuyển đổi sang trường hợp tiêu đề thích hợp:

String s= "ThiS iS SomE Text";
String[] arr = s.split(" ");
s = "";
for (String s1 : arr) {
    s += WordUtils.capitalize(s1.toLowerCase()) + " ";
}
s = s.substring(0, s.length() - 1);

Kết quả: "Đây là một số văn bản"


0

Sử dụng Spring's StringUtils:

org.springframework.util.StringUtils.capitalize(someText);

Nếu bạn vẫn đang sử dụng Spring, điều này sẽ tránh mang lại một khuôn khổ khác.


0

Sử dụng phương pháp này để chuyển đổi một chuỗi thành trường hợp tiêu đề:

static String toTitleCase(String word) {
    return Stream.of(word.split(" "))
            .map(w -> w.toUpperCase().charAt(0)+ w.toLowerCase().substring(1))
            .reduce((s, s2) -> s + " " + s2).orElse("");
}

0

Công cụ chuyển đổi này chuyển đổi bất kỳ chuỗi nào chứa chữ hoa lạc đà, khoảng trắng, chữ số và các ký tự khác thành chữ hoa tiêu đề được làm sạch.

/**
 * Convert a string to title case in java (with tests).
 *
 * @author Sudipto Chandra
 */
public abstract class TitleCase {

    /**
     * Returns the character type. <br>
     * <br>
     * Digit = 2 <br>
     * Lower case alphabet = 0 <br>
     * Uppercase case alphabet = 1 <br>
     * All else = -1.
     *
     * @param ch
     * @return
     */
    private static int getCharType(char ch) {
        if (Character.isLowerCase(ch)) {
            return 0;
        } else if (Character.isUpperCase(ch)) {
            return 1;
        } else if (Character.isDigit(ch)) {
            return 2;
        }
        return -1;
    }

    /**
     * Converts any given string in camel or snake case to title case.
     * <br>
     * It uses the method getCharType and ignore any character that falls in
     * negative character type category. It separates two alphabets of not-equal
     * cases with a space. It accepts numbers and append it to the currently
     * running group, and puts a space at the end.
     * <br>
     * If the result is empty after the operations, original string is returned.
     *
     * @param text the text to be converted.
     * @return a title cased string
     */
    public static String titleCase(String text) {
        if (text == null || text.length() == 0) {
            return text;
        }

        char[] str = text.toCharArray();
        StringBuilder sb = new StringBuilder();

        boolean capRepeated = false;
        for (int i = 0, prev = -1, next; i < str.length; ++i, prev = next) {
            next = getCharType(str[i]);
            // trace consecutive capital cases
            if (prev == 1 && next == 1) {
                capRepeated = true;
            } else if (next != 0) {
                capRepeated = false;
            }
            // next is ignorable
            if (next == -1) {
                // System.out.printf("case 0, %d %d %s\n", prev, next, sb.toString());
                continue; // does not append anything
            }
            // prev and next are of same type
            if (prev == next) {
                sb.append(str[i]);
                // System.out.printf("case 1, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is not an alphabet
            if (next == 2) {
                sb.append(str[i]);
                // System.out.printf("case 2, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is an alphabet, prev was not +
            // next is uppercase and prev was lowercase
            if (prev == -1 || prev == 2 || prev == 0) {
                if (sb.length() != 0) {
                    sb.append(' ');
                }
                sb.append(Character.toUpperCase(str[i]));
                // System.out.printf("case 3, %d %d %s\n", prev, next, sb.toString());
                continue;
            }
            // next is lowercase and prev was uppercase
            if (prev == 1) {
                if (capRepeated) {
                    sb.insert(sb.length() - 1, ' ');
                    capRepeated = false;
                }
                sb.append(str[i]);
                // System.out.printf("case 4, %d %d %s\n", prev, next, sb.toString());
            }
        }
        String output = sb.toString().trim();
        output = (output.length() == 0) ? text : output;
        //return output;

        // Capitalize all words (Optional)
        String[] result = output.split(" ");
        for (int i = 0; i < result.length; ++i) {
            result[i] = result[i].charAt(0) + result[i].substring(1).toLowerCase();
        }
        output = String.join(" ", result);
        return output;
    }

    /**
     * Test method for the titleCase() function.
     */
    public static void testTitleCase() {
        System.out.println("--------------- Title Case Tests --------------------");
        String[][] samples = {
            {null, null},
            {"", ""},
            {"a", "A"},
            {"aa", "Aa"},
            {"aaa", "Aaa"},
            {"aC", "A C"},
            {"AC", "Ac"},
            {"aCa", "A Ca"},
            {"ACa", "A Ca"},
            {"aCamel", "A Camel"},
            {"anCamel", "An Camel"},
            {"CamelCase", "Camel Case"},
            {"camelCase", "Camel Case"},
            {"snake_case", "Snake Case"},
            {"toCamelCaseString", "To Camel Case String"},
            {"toCAMELCase", "To Camel Case"},
            {"_under_the_scoreCamelWith_", "Under The Score Camel With"},
            {"ABDTest", "Abd Test"},
            {"title123Case", "Title123 Case"},
            {"expect11", "Expect11"},
            {"all0verMe3", "All0 Ver Me3"},
            {"___", "___"},
            {"__a__", "A"},
            {"_A_b_c____aa", "A B C Aa"},
            {"_get$It132done", "Get It132 Done"},
            {"_122_", "122"},
            {"_no112", "No112"},
            {"Case-13title", "Case13 Title"},
            {"-no-allow-", "No Allow"},
            {"_paren-_-allow--not!", "Paren Allow Not"},
            {"Other.Allow.--False?", "Other Allow False"},
            {"$39$ldl%LK3$lk_389$klnsl-32489  3 42034 ", "39 Ldl Lk3 Lk389 Klnsl32489342034"},
            {"tHis will BE MY EXAMple", "T His Will Be My Exa Mple"},
            {"stripEvery.damn-paren- -_now", "Strip Every Damn Paren Now"},
            {"getMe", "Get Me"},
            {"whatSthePoint", "What Sthe Point"},
            {"n0pe_aLoud", "N0 Pe A Loud"},
            {"canHave SpacesThere", "Can Have Spaces There"},
            {"  why_underScore exists  ", "Why Under Score Exists"},
            {"small-to-be-seen", "Small To Be Seen"},
            {"toCAMELCase", "To Camel Case"},
            {"_under_the_scoreCamelWith_", "Under The Score Camel With"},
            {"last one onTheList", "Last One On The List"}
        };
        int pass = 0;
        for (String[] inp : samples) {
            String out = titleCase(inp[0]);
            //String out = WordUtils.capitalizeFully(inp[0]);
            System.out.printf("TEST '%s'\nWANTS '%s'\nFOUND '%s'\n", inp[0], inp[1], out);
            boolean passed = (out == null ? inp[1] == null : out.equals(inp[1]));
            pass += passed ? 1 : 0;
            System.out.println(passed ? "-- PASS --" : "!! FAIL !!");
            System.out.println();
        }
        System.out.printf("\n%d Passed, %d Failed.\n", pass, samples.length - pass);
    }

    public static void main(String[] args) {
        // run tests
        testTitleCase();
    }
}

Dưới đây là một số đầu vào:

aCamel
TitleCase
snake_case
fromCamelCASEString
ABCTest
expect11
_paren-_-allow--not!
  why_underScore   exists  
last one onTheList 

Và kết quả đầu ra của tôi:

A Camel
Title Case
Snake Case
From Camel Case String
Abc Test
Expect11
Paren Allow Not
Why Under Score Exists
Last One On The List

0

Có vẻ như không có câu trả lời nào định dạng nó trong trường hợp tiêu đề thực tế: "Làm thế nào để đạt được công việc trong mơ của bạn", "Để giết một con chim nhại", v.v. vì vậy tôi đã đưa ra phương pháp của riêng mình. Hoạt động tốt nhất cho các văn bản ngôn ngữ tiếng Anh.

private final static Set<Character> TITLE_CASE_DELIMITERS = new HashSet<>();

  static {
    TITLE_CASE_DELIMITERS.add(' ');
    TITLE_CASE_DELIMITERS.add('.');
    TITLE_CASE_DELIMITERS.add(',');
    TITLE_CASE_DELIMITERS.add(';');
    TITLE_CASE_DELIMITERS.add('/');
    TITLE_CASE_DELIMITERS.add('-');
    TITLE_CASE_DELIMITERS.add('(');
    TITLE_CASE_DELIMITERS.add(')');
  }

  private final static Set<String> TITLE_SMALLCASED_WORDS = new HashSet<>();

  static {
    TITLE_SMALLCASED_WORDS.add("a");
    TITLE_SMALLCASED_WORDS.add("an");
    TITLE_SMALLCASED_WORDS.add("the");
    TITLE_SMALLCASED_WORDS.add("for");
    TITLE_SMALLCASED_WORDS.add("in");
    TITLE_SMALLCASED_WORDS.add("on");
    TITLE_SMALLCASED_WORDS.add("of");
    TITLE_SMALLCASED_WORDS.add("and");
    TITLE_SMALLCASED_WORDS.add("but");
    TITLE_SMALLCASED_WORDS.add("or");
    TITLE_SMALLCASED_WORDS.add("nor");
    TITLE_SMALLCASED_WORDS.add("to");
  }

  public static String toCapitalizedWord(String oneWord) {
    if (oneWord.length() < 1) {
      return oneWord.toUpperCase();
    }
    return "" + Character.toTitleCase(oneWord.charAt(0)) + oneWord.substring(1).toLowerCase();
  }

  public static String toTitledWord(String oneWord) {
    if (TITLE_SMALLCASED_WORDS.contains(oneWord.toLowerCase())) {
      return oneWord.toLowerCase();
    }
    return toCapitalizedWord(oneWord);
  }

  public static String toTitleCase(String str) {
    StringBuilder result = new StringBuilder();
    StringBuilder oneWord = new StringBuilder();

    char previousDelimiter = 'x';
    /* on start, always move to upper case */
    for (char c : str.toCharArray()) {
      if (TITLE_CASE_DELIMITERS.contains(c)) {
        if (previousDelimiter == '-' || previousDelimiter == 'x') {
          result.append(toCapitalizedWord(oneWord.toString()));
        } else {
          result.append(toTitledWord(oneWord.toString()));
        }
        oneWord.setLength(0);
        result.append(c);
        previousDelimiter = c;
      } else {
        oneWord.append(c);
      }
    }
    if (previousDelimiter == '-' || previousDelimiter == 'x') {
      result.append(toCapitalizedWord(oneWord.toString()));
    } else {
      result.append(toTitledWord(oneWord.toString()));
    }
    return result.toString();
  }

  public static void main(String[] args) {
    System.out.println(toTitleCase("one year in paris"));
    System.out.println(toTitleCase("How to Land Your Dream Job"));
  }

0

Đây là giải pháp đơn giản nhất

    static void title(String a,String b){
    String ra = Character.toString(Character.toUpperCase(a.charAt(0)));
    String rb = Character.toString(Character.toUpperCase(b.charAt(0)));
    for(int i=1;i<a.length();i++){
        ra+=a.charAt(i);
    }
    for(int i=1;i<b.length();i++){
        rb+=b.charAt(i);
    }
    System.out.println(ra+" "+rb);

-1

Điều này sẽ hoạt động:

String str="i like pancakes";
String arr[]=str.split(" ");
String strNew="";
for(String str1:arr)
{
    Character oldchar=str1.charAt(0);
    Character newchar=Character.toUpperCase(str1.charAt(0));
    strNew=strNew+str1.replace(oldchar,newchar)+" ";    
}
System.out.println(strNew);

1
Đây không phải là câu trả lời hợp lệ vì OP yêu cầu hàm nội trang . Xem thêm nhận xét giải quyết sự phức tạp ẩn đằng sau điều này, tức là i18n.
Marcus

-2

Cách đơn giản nhất để chuyển đổi bất kỳ chuỗi nào thành một trường hợp tiêu đề, là sử dụng gói googles org.apache.commons.lang.WordUtils

System.out.println(WordUtils.capitalizeFully("tHis will BE MY EXAMple"));

Sẽ dẫn đến kết quả này

Đây sẽ là ví dụ của tôi

Tôi không chắc tại sao nó được đặt tên là "capitalizeFully", trong thực tế, hàm không tạo ra kết quả viết hoa đầy đủ, nhưng dù sao, đó là công cụ mà chúng ta cần.


1
Nó được đặt tên capitalizeFullyvì nó viết hoa mọi từ, kể cả những từ phải viết thường trong tiêu đề. Ngữ pháp.about.com/od/tz/g/Title
aij

2
Apache Commons không thuộc sở hữu của Google. Nó được duy trì bởi Apache Software Foundation. commons.apache.org
ATutorMe

-3

Xin lỗi, tôi là người mới bắt đầu nên thói quen viết mã của tôi rất tệ!

public class TitleCase {

    String title(String sent)
    {   
        sent =sent.trim();
        sent = sent.toLowerCase();
        String[] str1=new String[sent.length()];
        for(int k=0;k<=str1.length-1;k++){
            str1[k]=sent.charAt(k)+"";
    }

        for(int i=0;i<=sent.length()-1;i++){
            if(i==0){
                String s= sent.charAt(i)+"";
                str1[i]=s.toUpperCase();
                }
            if(str1[i].equals(" ")){
                String s= sent.charAt(i+1)+"";
                str1[i+1]=s.toUpperCase();
                }

            System.out.print(str1[i]);
            }

        return "";
        }

    public static void main(String[] args) {
        TitleCase a = new TitleCase();
        System.out.println(a.title("   enter your Statement!"));
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.