【问题标题】:Java String LimitJava 字符串限制
【发布时间】:2013-03-31 07:40:30
【问题描述】:

我是 java 新手(以前只使用 sql),我正在尝试为我的字符串变量设置长度限制。基本上我有一个用户名字段,只能是 6 个字符长。

我正在尝试以下方法:

private String username (6);

我假设这不是正确的格式。有谁知道我如何在java中正确做到这一点?

【问题讨论】:

    标签: java string netbeans limit


    【解决方案1】:

    其他一些答案声称“无法通过内置功能将 Java 中的字符串限制为某个有限数量”,并建议自己滚动。但是,Java EE 验证 API 仅用于此目的。一个例子:

    import javax.validation.constraints.Size;
    
    public class Person {
          @Size(max = 6)
          private String username;
    }
    

    有关如何使用验证 API 的更多信息,请参阅 this thread 例如。 Hibernate validator 是参考实现 (usage)。

    简而言之,当将对象注释为@Valid 时,将强制执行在注释中完成的验证。

    【讨论】:

      【解决方案2】:

      您建议的方法不是做您想做的事情的正确方法。尝试使用:

      private int stringLimit = 6;
      // Take input from user
      private String username = inputString.substring(0,stringLimit);
      

      例如:

      inputString = "joelspolsky";
      private String username = inputString.substring(0,stringLimit);
      // username is "joelsp"
      

      【讨论】:

      • 如果字符串比 stringLimit 短,这会爆炸。
      【解决方案3】:

      没有办法通过内置功能将 Java 中的字符串限制为某个有限数量。字符串是不可变的,并采用您在其构造函数中提供的值。您需要手动编写代码来执行此操作。

      使用length()函数确定String的长度,不允许长度大于6。

      if( username.length() > 6 )
      {
          throw new RuntimeException("User name too long");
      }
      

      您的选择之一是抛出异常,然后在其他地方处理它。或者您可以在遇到问题后立即向用户显示警报。

      【讨论】:

        【解决方案4】:

        您可以尝试这样的事情:从用户那里获取输入,然后使用以下函数验证该字符串。

        String output ="";
        public boolean set(String str, int limit){
              if(str.length() <= limit){
                    output= str;
                    return true;
              }
              else
                return false;
         }
        

        【讨论】:

          【解决方案5】:

          SubString() 不适合这个。如果输入字符串的长度小于限制 StringIndexOutOfBoundsException 将被抛出。 我认为您可以为此使用 StringBuilder

          StringBuilder buider = new StringBuilder(username);
          builder.setLength(6);
          String restName = builder.toString().trim();
          

          【讨论】:

            【解决方案6】:

            在这种情况下,annotation 机制可能很有用,当然,如果你知道这是什么的话。

            您可以创建自己的注释,例如:

            @Target(ElementType.FIELD)
            @Retention(RetentionPolicy.RUNTIME)
            public @interface MaxLength {
                int value();
            }
            

            并像这样使用它:

            @MaxLength(6)
            private String username;
            

            然后你必须在一个特殊的后处理器中对这些对象进行后处理,你必须手动创建它。

            【讨论】:

            • 没有工作!!!!!!!!!
            【解决方案7】:

            截断URL长度的例子

            if (getURLitem.length() >= 15) {
                            int stringLimit = 15;
                            final String smallURL = getURLitem.substring(0, stringLimit);
                            //show short string in textview...
            
                            TextView urlLink = (TextView) findViewById(R.id.url_link);
                            urlLink.setText(smallURL);
            
                            // Set On click listener and open URL below
                            ...........
                        } else {
                            //show full string in textview...
                            TextView urlLink = (TextView) findViewById(R.id.url_link);
                            urlLink.setText(getURLitem);
            
                            // Set On click listener and open URL below
                            ...........
                        }    
            

            【讨论】:

            • 我假设getString 是一个变量名。让我告诉你,这是一个非常糟糕的变量名称,因为它们的名称不应该以动词开头,这听起来像是一种方法,这可能会造成混淆。并且请不要只是发布代码,尝试解释您提供的解决方案是什么,记住您是来帮助他人的 :)
            猜你喜欢
            • 2016-09-13
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 2019-07-20
            • 1970-01-01
            • 1970-01-01
            • 2015-01-25
            相关资源
            最近更新 更多