折腾了一晚上,才发现这个原因.
如果只有空格还比较明确,我担心还有其他全角的控制符也trim不掉,怎么办?有没有其他全角控制符的trim方案

解决方案 »

  1.   

    半角转全角
    半角1个字节:byte a = '1';
    全角2个字节:dst[0]=0xA3; 
                 dst[1]=(byte)(0x80+a)             System.out.println(new String(dst));  
      

  2.   

    同意楼上,可以考虑先用replaceAll(,)把全角替换为半角!
      

  3.   

    replaceAll当然知道了.问题是有多少全角字符可以替换成半角的呢?我现在只知道空格是可以转换的,是否还有什么类似半角中"\n""\t"的全角控制字符不可见,但是在trim的时候应该被trim掉的.
      

  4.   

    还可以使用正则表达式:
          Pattern p = Pattern.compile("[ ]*");//匹配一个或多个空格 
          Matcher m = p.matcher(strIn);//strIn要检查的字符串
          boolean b = m.matches();
          if (b) {strIn= m.replaceAll("");} //删除匹配的字符串不过前面要import java.util.regex.Pattern;
             import java.util.regex.Matcher;
      

  5.   

    to: betsy2002(小实)
    你的正则表达式会把中间的空格都给去了的不知道怎么解决,觉得应该从它们的ASSIC码之间的转换关系去考虑,类似于1楼的。
      

  6.   

    trim()只是去掉字符串前后的空格,replaceAll()只是一种替换功能,并不能处理字符格式的问题,我觉得2楼的方法可行。
      

  7.   

    下面的代码是js代码,可以参考以下。function trimSpace( str ){
    var len = str.length;
    var RetStr = "";
    var Lpos = 0;
    var Rpos = len - 1;
    var flag = false;
    var i = 0;
    for ( i = 0; i < len; i++ ){
    if ( str.charAt( i ) != " " && str.charAt( i ) != " " ){
    Lpos = i;
    flag = true;
    break;
    }
    }
    for ( i = Rpos; i > -1; i-- ){
    if ( str.charAt( i ) != " " && str.charAt( i ) != " " ){
    Rpos = i;
    flag = true;
    break;
    }
    }
    if(flag){
    for ( i = Lpos; i <= Rpos; i++ ){
    RetStr += str.charAt( i );
    }
    return RetStr;
    }else{
    return "";
    }
    }
      

  8.   

    似乎前面说的已经很清楚了,不过我建议你还是写一个语法解析器,这样方便一些,另外一些符号,你可以去jdk的doc里面的pattern查一下,好多!
      

  9.   

    用replaceAll配合正则表达式,如[ \t\n]*.*,就可以把前面的特殊字符去掉,同理把后面的特殊字符去除
      

  10.   

    方案一(可能不聪明,但一定好用):
      1。使用trim();
      2。循环去除两边的全角空格。 String s = "  Hello World "; // 前部含有一个半角一个全角的空格
    s = s.trim();
    while (s.charAt(0) == ' ') { // 删除前部所有的全角空格
    s = s.substring(1);
    }
    while (s.charAt(s.length() - 1) == ' ') { // 删除后部所有的全角空格
    s = s.substring(0, s.length() - 1);
    }
    System.out.println(s);
      

  11.   

    但方案一有个bug:当连续出现一个半角、一个全角、再一个半角时,最后那个半角没有trim掉!
    最好的办法是写一个自定义的函数 myTrim(String source, String toTrim);返回把source两端的所有的toTrim截掉的字符串。 String myTrim(String source, String toTrim){
    StringBuffer sb = new StringBuffer(source);
    while(toTrim.indexOf(new Character(sb.charAt(0)).toString()) != -1) {
    sb.deleteCharAt(0);
    }
    while(toTrim.indexOf(new Character(sb.charAt(sb.length() - 1)).toString()) != -1) {
    sb.deleteCharAt(sb.length() - 1);
    }
    return sb.toString();
    }其中最二个参数是需要去掉的单个字符组成的字符串,如想去掉全角和半角的空格,则第二个参数为"  "。
    针对上面的例子,可以写成:s = myTrim(s, "  ");就行了。当然,这个方法是通用的,去掉两端的任一字符均可。
      

  12.   

    同时,需要注意的是:trim() 
    This method may be used to trim whitespace from the beginning and end of a string; in fact, it trims all ASCII control characters as well. 它除了截断空格外,还截断两端所有的控制字符。共5种字符(而我们上面给出的方法可以截断任何多个任意的字符):
    '\t' '\u0009' HORIZONTAL TABULATION 
    '\n' '\u000A' NEW LINE 
    '\f' '\u000C' FORM FEED 
    '\r' '\u000D' CARRIAGE RETURN 
    ' '  '\u0020' SPACE 
      

  13.   

    String FormatS(String p_str)
    {
    p_str=p_str.replaceAll("A","A");
    p_str=p_str.replaceAll("B","B");
    p_str=p_str.replaceAll("C","C");
    p_str=p_str.replaceAll("D","D");
    p_str=p_str.replaceAll("E","E");
    p_str=p_str.replaceAll("F","F");
    p_str=p_str.replaceAll("G","G");
    p_str=p_str.replaceAll("H","H");
    p_str=p_str.replaceAll("I","I");
    p_str=p_str.replaceAll("J","J");
    p_str=p_str.replaceAll("K","K");
    p_str=p_str.replaceAll("L","L");
    p_str=p_str.replaceAll("M","M");
    p_str=p_str.replaceAll("N","N");
    p_str=p_str.replaceAll("O","O");
    p_str=p_str.replaceAll("P","P");
    p_str=p_str.replaceAll("Q","Q");
    p_str=p_str.replaceAll("R","R");
    p_str=p_str.replaceAll("S","S");
    p_str=p_str.replaceAll("T","T");
    p_str=p_str.replaceAll("U","U");
    p_str=p_str.replaceAll("V","V");
    p_str=p_str.replaceAll("W","W");
    p_str=p_str.replaceAll("X","X");
    p_str=p_str.replaceAll("Y","Y");
    p_str=p_str.replaceAll("Z","Z"); p_str=p_str.replaceAll("a","A");
    p_str=p_str.replaceAll("b","B");
    p_str=p_str.replaceAll("c","C");
    p_str=p_str.replaceAll("d","D");
    p_str=p_str.replaceAll("e","E");
    p_str=p_str.replaceAll("f","F");
    p_str=p_str.replaceAll("g","G");
    p_str=p_str.replaceAll("h","H");
    p_str=p_str.replaceAll("i","I");
    p_str=p_str.replaceAll("j","J");
    p_str=p_str.replaceAll("k","K");
    p_str=p_str.replaceAll("l","L");
    p_str=p_str.replaceAll("m","M");
    p_str=p_str.replaceAll("n","N");
    p_str=p_str.replaceAll("o","O");
    p_str=p_str.replaceAll("p","P");
    p_str=p_str.replaceAll("q","Q");
    p_str=p_str.replaceAll("r","R");
    p_str=p_str.replaceAll("s","S");
    p_str=p_str.replaceAll("t","T");
    p_str=p_str.replaceAll("u","U");
    p_str=p_str.replaceAll("v","V");
    p_str=p_str.replaceAll("w","W");
    p_str=p_str.replaceAll("x","X");
    p_str=p_str.replaceAll("y","Y");
    p_str=p_str.replaceAll("z","Z"); p_str=p_str.replaceAll("a","A");
    p_str=p_str.replaceAll("b","B");
    p_str=p_str.replaceAll("c","C");
    p_str=p_str.replaceAll("d","D");
    p_str=p_str.replaceAll("e","E");
    p_str=p_str.replaceAll("f","F");
    p_str=p_str.replaceAll("g","G");
    p_str=p_str.replaceAll("h","H");
    p_str=p_str.replaceAll("i","I");
    p_str=p_str.replaceAll("j","J");
    p_str=p_str.replaceAll("k","K");
    p_str=p_str.replaceAll("l","L");
    p_str=p_str.replaceAll("m","M");
    p_str=p_str.replaceAll("n","N");
    p_str=p_str.replaceAll("o","O");
    p_str=p_str.replaceAll("p","P");
    p_str=p_str.replaceAll("q","Q");
    p_str=p_str.replaceAll("r","R");
    p_str=p_str.replaceAll("s","S");
    p_str=p_str.replaceAll("t","T");
    p_str=p_str.replaceAll("u","U");
    p_str=p_str.replaceAll("v","V");
    p_str=p_str.replaceAll("w","W");
    p_str=p_str.replaceAll("x","X");
    p_str=p_str.replaceAll("y","Y");
    p_str=p_str.replaceAll("z","Z");
    p_str=p_str.replaceAll("0","0");
    p_str=p_str.replaceAll("1","1");
    p_str=p_str.replaceAll("2","2");
    p_str=p_str.replaceAll("3","3");
    p_str=p_str.replaceAll("4","4");
    p_str=p_str.replaceAll("5","5");
    p_str=p_str.replaceAll("6","6");
    p_str=p_str.replaceAll("7","7");
    p_str=p_str.replaceAll("8","8");
    p_str=p_str.replaceAll("9","9"); p_str = p_str.replaceAll("\\.", ""); //烂java, 还要转意。
    p_str = p_str.replaceAll("\\。", "");
    p_str = p_str.replaceAll("\\.", "");
    p_str = p_str.replaceAll("\\*", "");
    p_str = p_str.replaceAll("\\\u30FB", "");
    p_str = p_str.replaceAll("\\-", "");
    p_str = p_str.replaceAll("\\_", "");
    p_str = p_str.replaceAll("\\-", "");
    p_str=p_str.replaceAll("\\/","");
    p_str=p_str.trim();
    p_str=p_str.replaceAll(" +", "");//去中间空格
    p_str=p_str.replaceAll(" +", "");//去全角中间空格
    //  p_str=p_str.replaceAll("\\","");//烂java, 这个转不出来了。
    return p_str;
        }