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

问题描述 投票:49回答:10

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

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

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

java
10个回答
152
投票

为什么不只是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!");
}

0
投票

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

String numbers = defaultValue();
try{
   numbers = word.substring(word.length() - 3);
} catch(Exception e) {
   System.out.println("Insufficient String length");
}

18
投票

我会考虑来自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)

您可以在上面的链接中找到更多示例。


15
投票

这里有一些使用正则表达式完成工作的简洁代码:

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
投票
public String getLastThree(String myString) {
    if(myString.length() > 3)
        return myString.substring(myString.length()-3);
    else
        return myString;
}

2
投票

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

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


2
投票

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


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();
}

0
投票

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

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

我同意其他人的意见,我认为子字符串是处理你想要完成的事情的更好方法。


0
投票

您可以使用子字符串

String word = "onetwotwoone"
int lenght = word.length(); //Note this should be function.
String numbers = word.substring(word.length() - 3);
© www.soinside.com 2019 - 2024. All rights reserved.