从任何字符串中获取最后三个字符-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