【问题标题】:How can I tokenize a string with a lot of different characters?如何标记具有许多不同字符的字符串?
【发布时间】:2023-03-15 11:09:01
【问题描述】:

我想拆分一个如下所示的字符串:

Johannesburg General Hospital011 488 4911

但有些字符串之间有一个空格,如下所示:

Johannesburg General Hospital 011 488 4911

我希望它是这样的 2 个不同的数组:

约翰内斯堡综合医院

011 488 4911

如果没有空间怎么拆分?

【问题讨论】:

  • 不清楚你在问什么。请添加一个示例,说明您在问题中显示的字符串的标记化结果。
  • 您是从 XML 获取数据吗?
  • 一些关于源数据的更多信息会很好,看看是否有任何适用的规则。

标签: android stringtokenizer


【解决方案1】:

您可以为此构建一个正则表达式,但 for 循环也一样好:

/**
* @return the rest of the input text from the first digit
*/
public String findPhone(String text) {
    for (int i = 0; i < text.length(); ++i) {
        if (Character.isDigit(text.charAt(i))) {
            return text.substring(i);
        }
    }
    return "";
}

你可以这样称呼它:

String number = findPhone("Johannesburg General Hospital011 488 4911")
// number is 011 488 4911 here
String sanitizedNumber = number.replace(" ", ""); // number without spaces

【讨论】:

  • 你是第一个明白我要问什么的人!
【解决方案2】:

您可以使用带有正则表达式的组,这可能是您的表达式。

 Pattern p = Pattern.compile("([^\\d]*) ([\\d ]*)");
       //  get a matcher object
       Matcher m = p.matcher("Johannesburg General Hospital 011 488 4911 Johannesburg General Hospital 011 488 4911");
       int count = 0;
       while(m.find()) {
           count++;
           System.out.println(m.group(1));
           System.out.println(m.group(2));
      }
   }

谢谢

【讨论】:

  • Java 具有接受正则表达式的 split() 方法。可以说: myString.split(" |Police") 和 &nbsp 和 Police 词将用作标记器。但是问题不包含预期的结果,解释太模糊。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2011-02-08
  • 2013-12-24
相关资源
最近更新 更多