web-dev-qa-db-ja.com

文字列から最後の文字を削除する方法

文字列から最後の文字を削除したいです。私はこれをやってみました:

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を取得し、最後の文字を何も置き換えない(削除する)が、プログラムを実行するたびに、最後の文字と同じ中央の文字が削除される。

たとえば、Wordは "admirer"です。メソッドを実行した後、私は "admie"を受け取ります。 Wordの感心を元に戻してほしいのです。

404
duaprog137

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;
}
573
Gary Buyn

ライナーが1つだけではないのはなぜですか?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

フルコード

import Java.util.*;
import Java.lang.*;

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) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

デモ

213
Fahim Parkar

私たちは主題についているので、人は正規表現も使うことができます

"aaabcd".replaceFirst(".$",""); //=> aaabc  
82
iddqd

説明された問題および提案された解決策は時々セパレータを除去することに関する。これがあなたのケースであるならば、それからApache Commons StringUtilsを見てください、それは非常にエレガントである removeEnd と呼ばれるメソッドを持っています。

例:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

"string 1 | string 2 | string 3"という結果になります。

65
Mart135688
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}
44
BobBobBob

他の人がすでに文字列操作を実行するためのライブラリを書いている間、ホイールを再発明しようとしないでください: org.Apache.commons.lang3.StringUtils.chop()

29
membersound

これを使って:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }
17
Navaneeth
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

たとえば、Wordは "admirer"です。メソッドを実行した後、私は "admie"を受け取ります。 Wordの感心を元に戻してほしいのです。

語幹 英単語を使おうとしている場合

ステミングとは、活用されていない(または派生している)単語を、その語幹、基本形、または語形(通常は単語の表記)に変換するプロセスです。

...

たとえば、英語のステマーは、ルートの "cat"に基づいて文字列 "cats"(および場合によっては "catlike"、 "catty"など)、および「語幹」に基づきます。ステミングアルゴリズムは、単語 "fishing"、 "fished"、 "fish"、および "fisher"を、語根である "fish"に減らします。

Luceneステマーの違い:EnglishStemmer、PorterStemmer、LovinsStemmer いくつかのJavaオプションの概要。

11
Mike Samuel

読みやすさに関する限り、私はこれが最も簡潔であると思います

StringUtils.substring("string", 0, -1);

負のインデックスは、ApacheのStringUtilsユーティリティで使用できます。負の数はすべて、文字列の末尾からのオフセットから処理されます。

9
Kasturi

「xxx」の最後の出現を削除します。

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));

最後の 'xxx'が最後の場合は削除します。

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));

あなたはあなたが望むものに 'xxx'を取り替えることができますが、特別な文字には気をつけてください

StringBuilderクラスを見てください。

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
3
aeocom
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);
3
Bachan Joseph
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}
3

1行の答え(ちょうど おかしな選択肢 - これを家で試してはいけない、そしてすばらしい答えはすでに出ている):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
2

エスケープシーケンス ...を使用しないのはなぜですか。

System.out.println(str + '\b');

人生ははるかに簡単になりました。 XD! 〜読みやすいワンライナー

2
Tilak Maddy
// 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;
}

Kotlinでは、文字列クラスのdropLast()メソッドを使うことができます。与えられた数を文字列から削除します。

val string1 = "Some Text"
string1.dropLast(1)
1
Mahavir Jain

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

出力:test-ab

1
Nadhu

ここでのほとんどの回答は、 サロゲートペア を忘れていました。

たとえば、文字???? (コードポイントU + 1D56B)は単一のcharに収まらないため、表現するには2つの文字のサロゲートペアを形成する必要があります。

現在受け入れられている回答を単に適用する場合(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);
}
1
MC Emperor

次のように「if」の条件を置き換えるだけです。

if(a.substring(a.length()-1).equals("x"))'

これはあなたのためのトリックを行います。

0

あなたがのような特別な性格を持っているならば。 jsonでは、単にString.replace( ";"、 "")を使用してください。

0
MoadKey

私は同様の問題のためにコードを書き直す必要がありました。私がそれを解決することができた一つの方法はコーディングの再帰的な方法を使いました。

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

このトピックで私が見たコードの大部分は再帰を使用していないので、うまくいけば私はあなたか同じ問題を抱えている誰かを助けることができます。

0
Jacob Mehnert

最後に再帰の中で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"
0
simon francis

部分文字列を使用できます。これがその例です。

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}
0
Shiva

これがBasic Multilingual Plane(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())));
}
0
Patrick Parker

文字列の合計の長さ= 24で、14桁目以降の最後の文字をカットして、14桁目を開始したいとします。そこで、次の解決策を適用します。

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
0
Avinash Khadsan
 "String name" = "String name".substring(0, ("String name".length() - 1));

私は自分のコードでこれを使用しています、それは簡単で簡単です。 Stringが> 0の間だけ動作します。ボタンに接続し、次の if ステートメントの中に入れます。

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}
0
Donoso