71

我正在尝试获取任何字符串的最后三个字符并将其保存为另一个字符串变量。我的思维过程有些艰难。

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

当涉及到缓冲区或索引时,我不知道如何使用 getChars 方法。Eclipse 让我拥有了那些。有什么建议么?

4

12 回答 12

194

为什么不只是String substr = word.substring(word.length() - 3)

更新

请确保String在调用之前检查 至少 3 个字符substring()

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 fewer than 3 characters!");
}
于 2013-03-06T16:59:23.103 回答
31

我会考虑来自 Apache Commons Lang 类的 right方法: http ://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,% 20int)StringUtils

这是安全的。你不会得到NullPointerExceptionStringIndexOutOfBoundsException

示例用法:

StringUtils.right("abcdef", 3)

您可以在上述链接下找到更多示例。

于 2016-10-03T08:52:34.293 回答
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);
}
于 2013-03-06T17:02:21.627 回答
7

String newString = originalString.substring(originalString.length()-3);

于 2013-03-06T16:59:23.593 回答
5
public String getLastThree(String myString) {
    if(myString.length() > 3)
        return myString.substring(myString.length()-3);
    else
        return myString;
}
于 2013-03-06T17:01:16.070 回答
3

如果要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表示要提取的字符串部分。第三个参数是该部分将被放入的数组。最后一个参数给出了缓冲区中操作开始的位置。

如果字符串少于三个字符,则在上述任何一种情况下都会出现异常,因此您可能需要检查一下。

于 2013-03-06T17:01:17.517 回答
2

这是我用来获取字符串的最后一个 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
于 2019-07-25T05:12:37.027 回答
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();
}
于 2019-04-10T04:14:05.577 回答
0

getCharsstring 方法不返回值,而是将其结果转储到缓冲区(或目标)数组中。index 参数描述目标数组中的起始偏移量。

试试这个链接以获得更详细的getChars方法描述。

我同意其他人的观点,我认为 substring 是处理你想要完成的事情的更好方法。

于 2013-03-06T17:00:31.547 回答
0

您可以使用子字符串

String word = "onetwotwoone"
int lenght = word.length(); //Note this should be function.
String numbers = word.substring(word.length() - 3);
于 2013-03-06T17:00:46.323 回答
0

“字符串长度不足或空”保存的替代方法:

String numbers = defaultValue();
try{
   numbers = word.substring(word.length() - 3);
} catch(Exception e) {
   System.out.println("Insufficient String length");
}
于 2019-01-10T13:54:04.797 回答
0

此方法将从末尾返回 x 个字符。

public static String lastXChars(String v, int x) {
    return v.length() <= x ? v : v.substring(v.length() - x);
}

//用法

System.out.println(lastXChars("stackoverflow", 4)); // flow
于 2022-03-02T12:31:14.557 回答