首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种简单的方法可以将java字符串转换为包括diacritics在内的标题大小写,而不需要第三方库?

是否有一种简单的方法可以将java字符串转换为包括diacritics在内的标题大小写,而不需要第三方库?
EN

Stack Overflow用户
提问于 2021-05-08 12:01:14
回答 3查看 539关注 0票数 1

是否有一种简单的方法可以将java字符串转换为标题大小写(包括diacritics ),而不需要第三方库。

我发现了这个老问题,但我认为Java从那以后得到了许多改进。

Is there a method for String conversion to Title Case?

示例:

zola

  • O'mALLey

  • JEAN-CLAUDE DUSSE
  • sinéad

预期结果:

O'Connor

  • Émile Zola

  • O'Malley

  • Jean-Claude Dusse
  • Sinéad
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-08 12:05:40

我在regex中使用此方法:

代码语言:javascript
运行
复制
public static void main(String[] args) {

    System.out.println(titleCase("JEAN-CLAUDE DUSSE"));
    System.out.println(titleCase("sinéad o'connor"));
    System.out.println(titleCase("émile zola"));
    System.out.println(titleCase("O'mALLey"));
}

public static String titleCase(String text) {

    if (text == null)
        return null;

    Pattern pattern = Pattern.compile("\\b([a-zÀ-ÖØ-öø-ÿ])([\\w]*)");
    Matcher matcher = pattern.matcher(text.toLowerCase());

    StringBuilder buffer = new StringBuilder();

    while (matcher.find())
        matcher.appendReplacement(buffer, matcher.group(1).toUpperCase() + matcher.group(2));

    return matcher.appendTail(buffer).toString();
}

我已经测试过你的弦了。

以下是要输出的结果:

代码语言:javascript
运行
复制
Jean-Claude Dusse
Sinéad O'Connor
Émile Zola
O'Malley
票数 4
EN

Stack Overflow用户

发布于 2021-05-08 12:22:09

实现这个目标的两种方法-

使用Apache的

代码语言:javascript
运行
复制
public static String convertToTileCase(String text) {
    return WordUtils.capitalizeFully(text);
}

自定义函数

代码语言:javascript
运行
复制
private final static String WORD_SEPARATOR = " ";

public static String changeToTitleCaseCustom(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    return Arrays.stream(text.split(WORD_SEPARATOR))
            .map(word -> word.isEmpty()
                    ? word
                    : Character.toTitleCase(word.charAt(0)) + word.substring(1).toLowerCase()
            )
            .collect(Collectors.joining(WORD_SEPARATOR));
}

调用上面的自定义函数-

代码语言:javascript
运行
复制
System.out.println(
            changeToTitleCaseCustom("JEAN-CLAUDE DUSSE") + "\n" +
                    changeToTitleCaseCustom("sinéad o'connor") + "\n" +
                    changeToTitleCaseCustom("émile zola") + "\n" +
                    changeToTitleCaseCustom("O'mALLey") + "\n");

产出-

代码语言:javascript
运行
复制
Jean-claude Dusse
Sinéad O'connor
Émile Zola
O'malley
票数 0
EN

Stack Overflow用户

发布于 2022-09-29 14:49:58

非常喜欢正则表达式,但是如果有人想要一个不同的解决方案,这是我的解决方案。据我所知,唯一的拆分字符应该是-'

代码语言:javascript
运行
复制
public static String toTitleCase(String content) {
    if (content == null || content.isEmpty()) {
        return content;
    }

    HashSet<Character> splitSet = new HashSet<Character>(Arrays.asList(new Character[]{' ', '-', '\''}));
    char[] titleCased = new char[content.length()];
    for (int i = 0; i < content.length(); i++) {
        boolean applyTitleCase = i == 0 || splitSet.contains(content.charAt(i - 1));
        char targetChar = content.charAt(i);
        titleCased[i] = applyTitleCase ? Character.toTitleCase(targetChar) : Character.toLowerCase(targetChar);
    }
    return new String(titleCased);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67447311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档