从任何字符串中获取最后三个字符 - Java

时间:2013-03-06 16:57:13

标签: java

我正在尝试获取任何字符串的最后三个字符并将其另存为另一个String变量。我在思考过程中遇到了一些艰难的时期。

String word = "onetwotwoone"
int length = word.length();
String new_word = id.getChars(length-3, length, buffer, index);

我不知道如何在缓冲区或索引中使用getChars方法。 Eclipse让我有那些人。有什么建议吗?

11 个答案:

答案 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)

很安全。您不会获得NullPointerExceptionStringIndexOutOfBoundsException

使用示例:

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