Java 如何格式化字符串以包含所需的空白?

Java 如何格式化字符串以包含所需的空白?,java,Java,我想用Java格式化一个字符串。这是我的密码: 当我运行代码时,我得到了以下信息:(不要介意前面的分号) 输出文本应以分号分隔为三部分,如下所示,并应保留最后两部分中的1或2个空格: 我不知道如何保持“学院”和“的”以及“的”和“纽约”之间的空白。或者“NY”和“10286”之间的两个空格。如何设置行的格式 对于这样的字符串,没有一个好方法,因为必须有一个明确的规则来分隔子字符串。分隔符是一个空格,两个空格,任意数目 现在,如果你有这样的东西,你可以更容易地做到: Strin

我想用Java格式化一个字符串。这是我的密码:




当我运行代码时,我得到了以下信息:(不要介意前面的分号)




输出文本应以分号分隔为三部分,如下所示,并应保留最后两部分中的1或2个空格:




我不知道如何保持“学院”和“的”以及“的”和“纽约”之间的空白。或者“NY”和“10286”之间的两个空格。如何设置行的格式

对于这样的字符串,没有一个好方法,因为必须有一个明确的规则来分隔子字符串。分隔符是一个空格,两个空格,任意数目

现在,如果你有这样的东西,你可以更容易地做到:

 String a = "John       'College of NY'      'NY  10286'";
然后可以在带引号的字符串中保留空格。 这符合你的家庭作业要求吗


如果是这样的话,请参见以下答案:

我会首先将项目分为正确的部分(长度)

在那之后,我会删掉周围的空白

try {
    String resultString = subjectString.replaceAll("(?i)\\A\\s*(.*?)\\s*\\Z", "$1");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
} catch (IllegalArgumentException ex) {
    // Syntax error in the replacement text (unescaped $ signs?)
} catch (IndexOutOfBoundsException ex) {
    // Non-existent backreference used the replacement text
}

从您的问题中不清楚字段是如何分隔的。如果是“3个或更多空格”(我是从你说“应该保留1或2个空格”时推断出来的),那么你可以使用
String.split
和正则表达式:

StringBuilder sb = new StringBuilder();
for (String s : "John       College of NY      NY  10286".split("\\s{3,}")) {
  sb.append(';');
  sb.append(s);
}
return sb.toString();
这将返回:

";John;College of NY;NY  10286"

考虑到您想在第二个和第三个单词后放一个空白字符,在第五个单词后放两个空白字符,您可以使用switch case语句来实现您想要的

你怎么知道哪些空格分隔元素,哪些空格不分隔元素?我认为这项任务没有很好的定义:)正如你所看到的,我更像是一个regexfreak,而不是一个java程序员(我想这些捕获并不都是必需的)String a=“纽约约翰学院10286”;System.out.println(a.replaceAll(“\\s{3,}”和“;”);
try {
    Pattern regex = Pattern.compile("(.{11})(.{19})(.{4})(.+)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        // matched text: regexMatcher.group()
        // match start: regexMatcher.start()
        // match end: regexMatcher.end()
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
try {
    String resultString = subjectString.replaceAll("(?i)\\A\\s*(.*?)\\s*\\Z", "$1");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
} catch (IllegalArgumentException ex) {
    // Syntax error in the replacement text (unescaped $ signs?)
} catch (IndexOutOfBoundsException ex) {
    // Non-existent backreference used the replacement text
}
StringBuilder sb = new StringBuilder();
for (String s : "John       College of NY      NY  10286".split("\\s{3,}")) {
  sb.append(';');
  sb.append(s);
}
return sb.toString();
";John;College of NY;NY  10286"
public static String removeSpaces(String s) {
    StringTokenizer st = new StringTokenizer(s," ",false);
    String t = "";

    int i=0;  // counter variable

    while(st.hasMoreElements()){

       switch(i)
       {
          case 2:
          case 3:
                 t =  t + " ";
                 break;
          case 5:
                 t =  t + "  ";
                break;
          default:
                 t =  t + ";";
                 break;
       }

       t = t + st.nextElement();
       ++i;
    }

    t =  t + ";";  // put the last semi-colon

    return t;
}