【问题标题】:Trim leading or trailing characters from a string?修剪字符串中的前导或尾随字符?
【发布时间】:2014-10-30 17:37:04
【问题描述】:

如何在java中修剪字符串的前导或尾随字符?

例如,斜线字符“/” - 我对空格不感兴趣,我希望在不同时间修剪前导字符或尾随字符。

【问题讨论】:

    标签: java string trim


    【解决方案1】:

    你可以使用

    领先:

    System.out.println("//test/me".replaceAll("^/+", ""));
    

    尾随:

    System.out.println("//test/me//".replaceAll("/+$", ""));
    

    【讨论】:

    • 这似乎工作得很好......你可以test it online here
    • @SayanSil 解决方案使用正则表达式语法。 ^/+ 只选择字符串开头的斜杠。
    【解决方案2】:

    您可以使用 Apache StringUtils.stripStart 修剪前导字符,或使用 StringUtils.stripEnd 修剪尾随字符。

    例如:

    System.out.println(StringUtils.stripStart("//test/me", "/"));
    

    将输出:

    测试/我

    请注意,如果由于某种原因您不能使用整个 StringUtils 库,您可以直接删除相关部分,as detailed here:

    【讨论】:

      【解决方案3】:

      用字符、字符串或正则表达式修剪

      如果运行时对您来说不是一个大问题,那么这段代码将非常有用。

      public class StringTrimmer {
          public static String trim(String string, char ch){
              return trim(string, ch, ch);
          }
      
          public static String trim(String string, char leadingChar, char trailingChar){
              return string.replaceAll("^["+leadingChar+"]+|["+trailingChar+"]+$", "");
          }
      
          public static String trim(String string, String regex){
              return trim(string, regex, regex);
          }
      
          public static String trim(String string, String leadingRegex, String trailingRegex){
              return string.replaceAll("^("+leadingRegex+")+|("+trailingRegex+")+$", "");
          }
      
          // test
          public static void main(String[] args) {
              System.out.println(trim("110100", '1', '0')); // outputs: 01
              System.out.println(trim("**Aa0*#**", '*')); // outputs: Aa0*#
              System.out.println(trim("123##22222", "12", "22")); // outputs: 3##2
              System.out.println(trim("101101##10101", "101")); // outputs: ##10
              System.out.println(trim("123##abcde", "\\d", "[c-e]")); // outputs: ##ab
          }
      }
      

      【讨论】:

        【解决方案4】:

        对于那些使用 Spring 的人:

        https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#trimTrailingCharacter-java.lang.String-char-

        import org.springframework.util.StringUtils;    
        
        public void setFileName(String fileName) {
            // If the extension does not exist trim the trailing period
            this.fileName = StringUtils.trimTrailingCharacter(fileName,'.');
        }
        

        【讨论】:

          【解决方案5】:

          如果要从字符串中删除前导字符,可以使用简单的迭代:

          String removeLeadingChar(String s, char c) {
              int i;
              for(i = 0; i < s.length() && s.charAt(i) == c; ++i);
              return s.substring(i);
          }
          

          如果您想删除任何尾随 char,则适用相同的逻辑。

          【讨论】:

            【解决方案6】:

            我从 String str 修剪前导和/或尾随 String 的版本。两个参数都可以为空。当 str 没有前导和/或尾随 s 时,它不会改变。

            String trim(String str, String s) {
                String res = s == null ? str : str == null ? null : s.length() >= str.length() ? str : str.replaceFirst(s, "");
                if ((res != null) && (s != null) && (res.length() >= s.length())) {
                    return res.substring(res.length() - s.length(), res.length()).equals(s) ? res.substring(0, res.length() - s.length()) : res;
                }
                return res;
            }
            

            【讨论】:

              最近更新 更多