我正在尝试获取任何字符串的最后三个字符并将其另存为另一个String变量。我在思考过程中遇到了一些艰难的时期。
String word = "onetwotwoone"
int length = word.length();
String new_word = id.getChars(length-3, length, buffer, index);
我不知道如何在缓冲区或索引中使用getChars方法。 Eclipse让我有那些人。有什么建议吗?
答案 0 :(得分:149)
为什么不只是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!");
}
答案 1 :(得分:17)
我会考虑来自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)
您可以在上述链接中找到更多示例。
答案 2 :(得分:14)
这是使用正则表达式完成工作的一些简洁代码:
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);
}
答案 3 :(得分:3)
public String getLastThree(String myString) {
if(myString.length() > 3)
return myString.substring(myString.length()-3);
else
return myString;
}
答案 4 :(得分:2)
String newString = originalString.substring(originalString.length()-3);
答案 5 :(得分:1)
如果您希望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
的前两个参数表示要提取的字符串部分。第三个参数是该部分将被放入的数组。最后一个参数给出了缓冲区中操作开始的位置。
如果字符串少于三个字符,则在上述任何一种情况下都会出现异常,因此您可能需要检查该字符串。
答案 6 :(得分:1)
此方法会有所帮助:
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();
}
答案 7 :(得分:0)
getChars
字符串方法不返回值,而是将其结果转储到缓冲区(或目标)数组中。 index参数描述目标数组中的起始偏移量。
请尝试使用此link获取有关getChars
方法的详细说明。
我同意其他人的意见,我认为子字符串是处理你想要完成的事情的更好方法。
答案 8 :(得分:0)
您可以使用子字符串
String word = "onetwotwoone"
int lenght = word.length(); //Note this should be function.
String numbers = word.substring(word.length() - 3);
答案 9 :(得分:0)
“字符串长度不足或为null”的另一种保存方式:
String numbers = defaultValue();
try{
numbers = word.substring(word.length() - 3);
} catch(Exception e) {
System.out.println("Insufficient String length");
}
答案 10 :(得分:0)
这是我用来获取字符串的最后一个xx的方法:
public static String takeLast(String value, int count) {
if (value == null || value.trim().length() == 0 || count < 1) {
return "";
}
if (value.length() > count) {
return value.substring(value.length() - count);
} else {
return value;
}
}
然后像这样使用它:
String testStr = "this is a test string";
String last1 = takeLast(testStr, 1); //Output: g
String last4 = takeLast(testStr, 4); //Output: ring