【发布时间】:2013-03-31 07:40:30
【问题描述】:
我是 java 新手(以前只使用 sql),我正在尝试为我的字符串变量设置长度限制。基本上我有一个用户名字段,只能是 6 个字符长。
我正在尝试以下方法:
private String username (6);
我假设这不是正确的格式。有谁知道我如何在java中正确做到这一点?
【问题讨论】:
标签: java string netbeans limit
我是 java 新手(以前只使用 sql),我正在尝试为我的字符串变量设置长度限制。基本上我有一个用户名字段,只能是 6 个字符长。
我正在尝试以下方法:
private String username (6);
我假设这不是正确的格式。有谁知道我如何在java中正确做到这一点?
【问题讨论】:
标签: java string netbeans limit
其他一些答案声称“无法通过内置功能将 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 时,将强制执行在注释中完成的验证。
【讨论】:
您建议的方法不是做您想做的事情的正确方法。尝试使用:
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"
【讨论】:
没有办法通过内置功能将 Java 中的字符串限制为某个有限数量。字符串是不可变的,并采用您在其构造函数中提供的值。您需要手动编写代码来执行此操作。
使用length()函数确定String的长度,不允许长度大于6。
if( username.length() > 6 )
{
throw new RuntimeException("User name too long");
}
您的选择之一是抛出异常,然后在其他地方处理它。或者您可以在遇到问题后立即向用户显示警报。
【讨论】:
您可以尝试这样的事情:从用户那里获取输入,然后使用以下函数验证该字符串。
String output ="";
public boolean set(String str, int limit){
if(str.length() <= limit){
output= str;
return true;
}
else
return false;
}
【讨论】:
SubString() 不适合这个。如果输入字符串的长度小于限制 StringIndexOutOfBoundsException 将被抛出。 我认为您可以为此使用 StringBuilder。
StringBuilder buider = new StringBuilder(username);
builder.setLength(6);
String restName = builder.toString().trim();
【讨论】:
在这种情况下,annotation 机制可能很有用,当然,如果你知道这是什么的话。
您可以创建自己的注释,例如:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MaxLength {
int value();
}
并像这样使用它:
@MaxLength(6)
private String username;
然后你必须在一个特殊的后处理器中对这些对象进行后处理,你必须手动创建它。
【讨论】:
截断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 是一个变量名。让我告诉你,这是一个非常糟糕的变量名称,因为它们的名称不应该以动词开头,这听起来像是一种方法,这可能会造成混淆。并且请不要只是发布代码,尝试解释您提供的解决方案是什么,记住您是来帮助他人的 :)