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

从任何字符串中获取最后三个字符-Java,java,Java,我试图获取任何字符串的最后三个字符,并将其另存为另一个字符串变量。我的思维过程有些困难 String word = "onetwotwoone" int length = word.length(); String new_word = id.getChars(length-3, length, buffer, index); 当涉及到缓冲区或索引时,我不知道如何使用getChars方法。月食让我把它们放在那里。有什么建议吗?为什么不干脆字符串substr=word.substring(wor

我试图获取任何字符串的最后三个字符,并将其另存为另一个字符串变量。我的思维过程有些困难

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

当涉及到缓冲区或索引时,我不知道如何使用getChars方法。月食让我把它们放在那里。有什么建议吗?

为什么不干脆
字符串substr=word.substring(word.length()-3)

更新

在调用
substring()
之前,请确保检查
字符串长度是否至少为3个字符:


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

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

请尝试以下内容,了解
getChars
方法的详细描述


我同意其他人的看法,我认为子字符串是处理您试图完成的任务的更好的方法。

您可以使用子字符串

String word = "onetwotwoone"
int lenght = word.length(); //Note this should be function.
String numbers = word.substring(word.length() - 3);

如果希望字符串由最后三个字符组成,可以使用:

如果您确实希望它们作为字符数组,那么应该编写

char[] buffer = new char[3];
int length = word.length();
word.getChars(length - 3, length, buffer, 0);
前两个参数表示要提取的字符串部分。第三个参数是将该部分放入的数组。最后一个参数给出了操作在缓冲区中开始的位置


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

以下是一些使用正则表达式执行此任务的简洁代码:

String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1");
此代码最多返回3;如果少于3,则只返回字符串

这是如何在一行中没有正则表达式的情况下安全地执行此操作:

String last3 = str == null || str.length() < 3 ? 
    str : str.substring(str.length() - 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);
}
stringlast3;
如果(str==null | | str.length()<3){
last3=str;
}否则{
last3=str.substring(str.length()-3);
}

<代码> > p>我将从<代码> > StutuTurs类从Apache Calm郎考虑:<代码>右/代码>方法:

它是安全的。您将不会获得
NullPointerException
StringIndexOutOfBoundsException

用法示例:

StringUtils.right(“abcdef”,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();
}
String rightPart(字符串文本,整数长度)
{

如果(text.length(),我使用以下方法获取字符串的最后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;
    }
}

缓冲区是一个
char[]
字符将进入的位置,索引是要开始复制的数组的开始。只需创建一个大小为3的char[],并将索引设置为0。尽管子字符串可能更适合标记转换为char[](String.tocharray()然后打印最后3个)可能必须小心使用少于三个字符的字符串,我认为负输入将返回原始字符串(可能是错误的),这对于他们试图实现的目标来说可能是可以接受的,也可能是不可以接受的。@celestialorb:负索引将导致异常,根据。@celestialorb,谢谢你提到,无论如何,问题的初始代码也必须处理异常,所以我没有考虑这个问题。使用
Math.max可以轻松避免负索引()
像这样
String substr=word.substring(Math.max(0,word.length()-3))
为什么要用问题来回答问题?你不认为他有理由不使用子字符串。可能他还不知道。可能,但由于三元运算符和缺少括号,很难理解。所以我建议不要这样。-1。@MvG所以这个答案“没有帮助”?(这就是-1投票的意思).为什么三元语法的使用没有帮助?你会把括号放在哪里?相反,我认为这个答案是有帮助的,特别是考虑到如果输入一个空或一个短输入,其他所有的答案都会爆炸。没有帮助,因为我相信(如果我错了,对不起)大多数用户挣扎着如何从一个给定的字符串中提取子串,这将在他们的头脑中试图读取你的代码。检查长度是很好的,但是在这个级别,我会考虑更多的冗长的解决方案是有益的,而神秘的解决方案只会混淆。至于括号:我会写这个代码>…=(………………………)
。你添加的换行符也让事情变得更好。它应该是
word.length()
请不要提供“仅限代码”的答案。这可能不会帮助其他人找到这篇文章。请简要说明你的代码正在做什么,以及为什么它有助于解决OP的问题。完成Mike…如果需要,请随时改进。
String last3;
if (str == null || str.length() < 3) {
    last3 = str;
} else {
    last3 = str.substring(str.length() - 3);
}
String numbers = defaultValue();
try{
   numbers = word.substring(word.length() - 3);
} catch(Exception e) {
   System.out.println("Insufficient String length");
}
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();
}
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