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

时间:2010-12-04 21:25:35

标签: java

我有一个我想用Java格式化的String。这是我的代码:


import java.util.*;
public class Test{

public static void main(String[] args){
  String a = "John       College of NY      NY  10286";
  a = removeSpaces(a);
  System.out.println(a);  
}

public static String removeSpaces(String s) {
  StringTokenizer st = new StringTokenizer(s," ",false);
  String t = "";
  while(st.hasMoreElements()){
     t =  t + ";" + st.nextElement();
  }
  return t;
}

<小时/>
当我运行我的代码时,我得到了回复:(不要介意前面的分号)


;John;College;of;NY;NY;10286

<小时/>
输出文本应该用分号分成三个部分,如此,它应该保留最后两个中的1或2个空格:


;John;College of NY;NY  10286;

<小时/> 我不知道如何保持“大学”和“大学”之间的空白区域。 “of”和“NY”。或“NY”和“10286”之间的两个白色空格。我该如何格式化线?

4 个答案:

答案 0 :(得分:1)

从您的问题中不清楚您的字段是如何划分的。如果它是“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"

答案 1 :(得分:0)

嗯,对于像这样的字符串,这并不是一个好方法,因为你必须有一个明确的规则来分隔子串。分隔符是一个空格,两个空格,任意数个......?

现在,如果你有这样的话,你可以更容易地做到这一点:

 String a = "John       'College of NY'      'NY  10286'";

然后你可以用引号在字符串中保留空格。 这是你的作业要求吗?

如果有,请参阅此答案:Regex for splitting a string using space when not surrounded by single or double quotes

答案 2 :(得分:0)

我首先要分开正确部分的项目(长度)

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
}

答案 3 :(得分:0)

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;
}

考虑到你想在第二个和第三个单词之后放一个空白字符,在第五个单词之后放两个空白字符,你可以使用switch-case语句来达到你想要的效果。