【问题标题】:How to insert whitespaces before and after a word or character?如何在单词或字符前后插入空格?
【发布时间】:2015-12-17 14:52:31
【问题描述】:

我尝试将字符串转换为更好阅读的字符串。像“圣皮埃尔和密克隆”变成“圣皮埃尔和密克隆”或“圣文森特和格林纳丁斯”变成 “圣文森特和格林纳丁斯”

我的做法是这样的:

public static String whitespace(String str) {

    String string = str;
    if (string.contains("and")) {

        String[] parts = string.split("and");
        String part1 = parts[0];
        String part2 = parts[1];
        String partres = part1 + " and " + part2;


        if (partres.contains("the")) {
            String[] partl = string.split("the");
            String partl1 = partl[0];
            String partl2 = partl[1];
            String parterg = partl1 + " the " + partl2;
            return parterg;
        } else {
            return partres;
        }
    } else {
        return string;
    } }

这显然很糟糕。输出也是错误的。它适用于“and”,但如果字符串中也有“the”,它只适用于“the”。

输出是这个字符串:"SerbiaandEuropetheAmerica" --> "SerbiaandEurope the America"

【问题讨论】:

  • "ampersand"会被拆分成"ampers and"?
  • 为什么 'SaintVincentandtheGrenadines' 是 'Saint Vincent...' 而 'SaintPierreandMiquelon' 是 'SaintPiere...'?
  • @LuiggiMendoza 或者更好,Holl and。 @bastel String 类有 replaceAll 方法,但恐怕你的方法不能按预期工作,你需要一本字典,即使那样也很困难。
  • @bastel 在这种情况下,像这样创建所有可能的国家/地区的地图要容易得多:map.put( "SaintVincentandtheGrenadines", "Saint Vincent and the Grenadines" );,然后在地图中查找您的输入字符串。
  • 顺便说一句,Holland 是一个地区的名称,而不是一个国家/地区的名称。该国的官方名称为 Nertherl 和 S

标签: java string


【解决方案1】:

再想一想,如果以下情况属实,则有一个正则表达式解决方案:

1) 每个国名的每一个字都是Initcap

2) 当两个国家在您的字符串中相邻时,它们被“,”(您在 cmets 中提到过)或“and”分隔,因此没有像“HollandFrance”或“HollandtheAmerica”这样的字符串:

String str = "Serbia,FinlandandHolland,theAmerica";
System.out.println(str.replaceAll("([A-Z]|and|the)(?!and|,|$)", " $1").trim());

这仍然是一个临时解决方案,因此请仔细检查结果。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    String str = "SerbiaandEuropetheAmerica";
    str = str.replaceAll("the", " the ");
    str = str.replaceAll("and", " and ");
    System.out.println("str = " + str);
    

    结果如下:

    str = Serbia and Europe the America
    

    【讨论】:

    • 我为以土地结尾的国家做了一个例外。
    • @bastel 我不明白这是正确的解决方案吗?您最初要求将 SaintVincent 拆分为 SaintVincent 您如何通过上面的代码实现它?另外,为什么您认为其他两个答案不正确?
    • 别忘了做str = str.replaceAll("--", "-"),即去掉两个可以创建的连续空格:"theand" -> "-the--and - "(由于愚蠢的自动格式化,空格被减号替换)
    【解决方案3】:

    我认为您的问题与您的 second 条件 "if" 您在 string 上 split 而不是 partres 变量。

    【讨论】:

      【解决方案4】:

      我建议使用替换,如下所示:

      string.replace("the", " the ");
      string.replace("and", " and ");
      string.replace("  ", " ");
      

      【讨论】:

      • 您希望如何将 SaintVincent 拆分为 SaintVincent
      • 我不希望这样,因为您所说的行为显然不是提问者想要的。引用:“圣文森特和格林纳丁斯”改成“圣文森特和格林纳丁斯”
      • 不知道是谁给了你对问题的误解。
      • 请查看问题的编辑。你会明白这不是误解。同样在我对这个问题的最后评论中,我只想指出这一点。
      • 这是stackoverflow.com/revisions/34337505/1 的原帖。请消除您的误解
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多