我想从字符串中删除最后一个字符。我试过这样做:
public String method(String str) {
if (str.charAt(str.length()-1)=='x'){
str = str.replace(str.substring(str.length()-1), "");
return str;
} else{
return str;
}
}
获取字符串的长度 - 1 并将最后一个字母替换为空(删除它),但是每次我运行程序时,它都会删除与最后一个字母相同的中间字母。
例如,单词是“admirer”;运行该方法后,我得到“admie”。我希望它返回佩服这个词。
replace
将替换一个字母的所有实例。您需要做的就是使用 substring()
:
public String method(String str) {
if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
str = str.substring(0, str.length() - 1);
}
return str;
}
为什么不只有一个班轮?
public static String removeLastChar(String str) {
return removeLastChars(str, 1);
}
public static String removeLastChars(String str, int chars) {
return str.substring(0, str.length() - chars);
}
完整代码
public class Main {
public static void main (String[] args) throws java.lang.Exception {
String s1 = "Remove Last CharacterY";
String s2 = "Remove Last Character2";
System.out.println("After removing s1==" + removeLastChar(s1) + "==");
System.out.println("After removing s2==" + removeLastChar(s2) + "==");
}
public static String removeLastChar(String str) {
return removeLastChars(str, 1);
}
public static String removeLastChars(String str, int chars) {
return str.substring(0, str.length() - chars);
}
}
演示
return str.substring(0,str.length()-1);
之前添加了对空字符串的检查作为改进
由于我们在一个主题上,所以也可以使用正则表达式
"aaabcd".replaceFirst(".$",""); //=> aaabc
所描述的问题和建议的解决方案有时与移除分隔物有关。如果这是您的情况,请查看 Apache Commons StringUtils,它有一个名为 removeEnd 的方法,非常优雅。
例子:
StringUtils.removeEnd("string 1|string 2|string 3|", "|");
将导致:“字符串 1|字符串 2|字符串 3”
public String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length()-1);
}
不要试图重新发明轮子,而其他人已经编写了库来执行字符串操作:org.apache.commons.lang3.StringUtils.chop()
在 Kotlin 中,您可以使用字符串类的 dropLast() 方法。它将从字符串中删除给定的数字,返回一个新字符串
var string1 = "Some Text"
string1 = string1.dropLast(1)
用这个:
if(string.endsWith("x")) {
string= string.substring(0, string.length() - 1);
}
if (str.endsWith("x")) {
return str.substring(0, str.length() - 1);
}
return str;
例如,单词是“admirer”;运行该方法后,我得到“admie”。我希望它返回佩服这个词。
如果您尝试 stem 英语单词
词干提取是将屈折(或有时派生)的词简化为词干、基础或词根形式(通常是书面词形式)的过程。 ...例如,英语的词干分析器应将字符串“cats”(可能还有“catlike”、“catty”等)识别为基于词根“cat”、“stemmer”、“stemming”、“以“词干”为基础。词干算法将单词“fishing”、“fished”、“fish”和“fisher”简化为词根“fish”。
Difference between Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer 概述了一些 Java 选项。
就可读性而言,我觉得这是最简洁的
StringUtils.substring("string", 0, -1);
负索引可以在 Apache 的 StringUtils 实用程序中使用。所有负数都从字符串末尾的偏移量开始处理。
string = string.substring(0, (string.length() - 1));
我在我的代码中使用它,它很简单。它仅在字符串 > 0 时有效。我将它连接到一个按钮并在以下 if 语句中
if (string.length() > 0) {
string = string.substring(0, (string.length() - 1));
}
public String removeLastChar(String s) {
if (!Util.isEmpty(s)) {
s = s.substring(0, s.length()-1);
}
return s;
}
删除最后一次出现的“xxx”:
System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));
如果是最后一次,则删除最后一次出现的“xxx”:
System.out.println("aaa xxx aaa ".replaceAll("xxx\\s*$", ""));
您可以根据需要替换“xxx”,但要注意特殊字符
// creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
一个简单的任务怎么能变得复杂。我的解决方案是:
public String removeLastChar(String s) {
return s[0..-1]
}
或者
public String removeLastChar(String s) {
if (s.length() > 0) {
return s[0..-1]
}
return s
}
s[0..-1]
是 java 吗?
查看 StringBuilder 类:
StringBuilder sb=new StringBuilder("toto,");
System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
// Remove n last characters
// System.out.println(removeLast("Hello!!!333",3));
public String removeLast(String mes, int n) {
return mes != null && !mes.isEmpty() && mes.length()>n
? mes.substring(0, mes.length()-n): mes;
}
// Leave substring before character/string
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));
public String leaveBeforeChar(String mes, String last) {
return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
? mes.substring(0, mes.lastIndexOf(last)): mes;
}
一个单一的答案(只是一个有趣的选择 - 不要在家里尝试这个,并且已经给出了很好的答案):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
这里的大多数答案都忘记了 surrogate pairs。
例如,字符 𝕫(代码点 U+1D56B)不适合单个 char
,因此为了表示,它必须形成两个字符的代理对。
如果简单地应用当前接受的答案(使用 str.substring(0, str.length() - 1)
,则拼接代理对,导致意外结果。
还应该包括检查最后一个字符是否是代理对:
public static String removeLastChar(String str) {
Objects.requireNonNull(str, "The string should not be null");
if (str.isEmpty()) {
return str;
}
char lastChar = str.charAt(str.length() - 1);
int cut = Character.isSurrogate(lastChar) ? 2 : 1;
return str.substring(0, str.length() - cut);
}
IndexOutOfBoundsException
吗? (例如,如果 Character.isSurrogate 之前实际上没有字符,是否有可能返回 true,从而使 str.length()-cut
为负数)。
2
替换为 Math.min(2, str.length())
。
爪哇 8
import java.util.Optional;
public class Test
{
public static void main(String[] args) throws InterruptedException
{
System.out.println(removeLastChar("test-abc"));
}
public static String removeLastChar(String s) {
return Optional.ofNullable(s)
.filter(str -> str.length() != 0)
.map(str -> str.substring(0, str.length() - 1))
.orElse(s);
}
}
输出:测试-ab
public String removeLastCharacter(String str){
String result = null;
if ((str != null) && (str.length() > 0)) {
return str.substring(0, str.length() - 1);
}
else{
return "";
}
}
如果我们想删除给定文件的文件扩展名,
** 示例代码
public static String removeNCharactersFromLast(String str,int n){
if (str != null && (str.length() > 0)) {
return str.substring(0, str.length() - n);
}
return "";
}
如果您有特殊字符,例如;在 json 中只需使用 String.replace(";", "") 否则您必须重写字符串中的所有字符减去最后一个字符。
为什么不使用 escape sequence ...!
System.out.println(str + '\b');
现在生活轻松多了。 XD! ~ 可读的单行
最后如何在递归中制作char:
public static String removeChar(String word, char charToRemove)
{
String char_toremove=Character.toString(charToRemove);
for(int i = 0; i < word.length(); i++)
{
if(word.charAt(i) == charToRemove)
{
String newWord = word.substring(0, i) + word.substring(i + 1);
return removeChar(newWord,charToRemove);
}
}
System.out.println(word);
return word;
}
举个例子:
removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
这是一个适用于基本多语言平面(Java 8+)之外的代码点的答案。
使用流:
public String method(String str) {
return str.codePoints()
.limit(str.codePoints().count() - 1)
.mapToObj(i->new String(Character.toChars(i)))
.collect(Collectors.joining());
}
可能更有效:
public String method(String str) {
return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}
只需像这样替换“if”的条件:
if(a.substring(a.length()-1).equals("x"))'
这将为您解决问题。
假设我的字符串的总长度=24 我想在位置 14 之后剪切最后一个字符以结束,这意味着我希望从 14 开始。所以我应用以下解决方案。
String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
我不得不为类似的问题编写代码。我能够解决它的一种方法是使用递归编码方法。
static String removeChar(String word, char charToRemove)
{
for(int i = 0; i < word.lenght(); i++)
{
if(word.charAt(i) == charToRemove)
{
String newWord = word.substring(0, i) + word.substring(i + 1);
return removeChar(newWord, charToRemove);
}
}
return word;
}
我在这个主题上看到的大多数代码都没有使用递归,所以希望我能帮助你或遇到同样问题的人。
十分简单:
StringBuilder sb= new StringBuilder();
for(Entry<String,String> entry : map.entrySet()) {
sb.append(entry.getKey() + "_" + entry.getValue() + "|");
}
String requiredString = sb.substring(0, sb.length() - 1);
不定期副业成功案例分享
null != str &&
。str != null &&
!if (str = NULL)
,它不仅总是会评估为假(NULL == 0 == false),而且还会为str
分配一个值,这很可能不是您想要做的。但是你不能写if (NULL = str)
因为 NULL 不是一个变量并且不能被赋值。因此,将 NULL 放在左侧是一个更安全的约定。不过,这在 Java 中不是问题。