我正在尝试获取任何字符串的最后三个字符并将其另存为另一个String变量。我在思考过程中遇到了一些艰难的时期。
String word = "onetwotwoone"
int length = word.length();
String new_word = id.getChars(length-3, length, buffer, index);
我不知道如何在缓冲区或索引时使用getChars方法。 Eclipse让我有那些人。有什么建议?
为什么不只是String substr = word.substring(word.length() - 3)
?
更新
在调用String
之前,请确保检查substring()
的长度至少为3个字符:
if (word.length() == 3) {
return word;
} else if (word.length() > 3) {
return word.substring(word.length() - 3);
} else {
// whatever is appropriate in this case
throw new IllegalArgumentException("word has less than 3 characters!");
}
“字符串长度不足或为空”的替代方法另存为:
String numbers = defaultValue();
try{
numbers = word.substring(word.length() - 3);
} catch(Exception e) {
System.out.println("Insufficient String length");
}
我会考虑来自Apache Commons Lang的right
类的StringUtils
方法:http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,%20int)
这很安全。你不会得到NullPointerException
或StringIndexOutOfBoundsException
。
用法示例:
StringUtils.right("abcdef", 3)
您可以在上面的链接中找到更多示例。
这里有一些使用正则表达式完成工作的简洁代码:
String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1");
此代码最多返回3;如果少于3,则只返回字符串。
这是如何在没有正则表达式的情况下安全地完成它:
String last3 = str == null || str.length() < 3 ?
str : str.substring(str.length() - 3);
通过“安全”,我的意思是如果字符串为空或短于3个字符(所有其他答案都不是“安全”),则不会抛出异常。
上面的代码与此代码的效果完全相同,如果您更喜欢更详细,但可能更容易阅读的形式:
String last3;
if (str == null || str.length() < 3) {
last3 = str;
} else {
last3 = str.substring(str.length() - 3);
}
public String getLastThree(String myString) {
if(myString.length() > 3)
return myString.substring(myString.length()-3);
else
return myString;
}
如果你想要由最后三个字符组成的String
,你可以使用substring(int)
:
String new_word = word.substring(word.length() - 3);
如果你真的想要它们作为一个字符数组,你应该写
char[] buffer = new char[3];
int length = word.length();
word.getChars(length - 3, length, buffer, 0);
getChars
的前两个参数表示要提取的字符串部分。第三个参数是该部分将被放入的数组。最后一个参数给出了缓冲区中操作开始的位置。
如果字符串少于三个字符,则在上述任何一种情况下都会出现异常,因此您可能需要检查该字符串。
String newString = originalString.substring(originalString.length()-3);
这种方法会有所帮助:
String rightPart(String text,int length)
{
if (text.length()<length) return text;
String raw = "";
for (int i = 1; i <= length; i++) {
raw += text.toCharArray()[text.length()-i];
}
return new StringBuilder(raw).reverse().toString();
}
getChars
字符串方法不返回值,而是将其结果转储到缓冲区(或目标)数组中。 index参数描述目标数组中的起始偏移量。
试试这个link以获得更详细的getChars
方法描述。
我同意其他人的意见,我认为子字符串是处理你想要完成的事情的更好方法。
您可以使用子字符串
String word = "onetwotwoone"
int lenght = word.length(); //Note this should be function.
String numbers = word.substring(word.length() - 3);