文字列から1文字を削除する方法


128

Javaで文字列の個々の文字にアクセスするために、 String.charAt(2)。Javaで文字列の個々の文字を削除する組み込み関数はありますか?

このようなもの:

if(String.charAt(1) == String.charAt(2){
   //I want to remove the individual character at index 2. 
}

3
これを実行する実際の例を投稿できますか?
Rohit Jain

あなたは取り外さずに交換しました。独自に記述する必要がある場合があります。
kosa

coupleof substringとでそれを行うことができますindexOf。しかし、それは新しい文字列オブジェクトを作成します。
Rohit Jain

StringBuilderは、文字を操作するための読み取り/書き込みクラスです。これを文字列から作成し、sb.toString()を使用して結果の文字列を取得できます。
Aubin

回答:


227

StringBuilder変更可能なクラスを使用することもできます。

StringBuilder sb = new StringBuilder(inputString);

このメソッドには、deleteCharAt()他の多くのミューテーターメソッドとともにあります。

削除する必要のある文字を削除し、次のように結果を取得します。

String resultString = sb.toString();

これにより、不要な文字列オブジェクトの作成が回避されます。


あなたの答えはここでは機能していないようです... String numbers = "0123456789"; char c = '2'; numbers = numbers.replace(c, Character.MIN_VALUE); ''文字(空)を置き換えたい
Surajit Biswas

72

1つの可能性:

String result = str.substring(0, index) + str.substring(index+1);

Javaの文字列は不変であるため、結果は新しい文字列(および2つの中間文字列オブジェクト)になることに注意してください。


62

replaceと呼ばれるJava Stringメソッドを使用できます。これは、最初のパラメーターと一致するすべての文字を2番目のパラメーターで置き換えます。

String a = "Cool";
a = a.replace("o","");

15

いいえ、Javaの文字列は不変です。不要な文字を削除して新しい文字列を作成する必要があります。

stringのcインデックス位置idxにある単一の文字を置き換えるには、str次のようにします。新しい文字列が作成されることに注意してください。

String newstr = str.substring(0, idx) + str.substring(idx + 1);

1
-1:個々の文字replaceAllに対処することは適切ではありません。あなたは質問に答えません。
Aubin

1
@Aubin私は個々の文字を置き換えるために私の回答を更新しました。
オスカーロペス

個々のINDEXED文字に対処するためのreplace()は適切ではありません。質問に答えません(もう一度読んでください)。私は再び投票することはできません...
Aubin

1
@Aubinは私の質問の質問のように、私の回答の2番目の部分を読み直し、今度は反対投票を削除するのはどうですか?正解です。質問で尋ねられたケースに加えて、1つのケースが考慮されるだけです。
オスカル・ロペス

7
あなたの答えはまったく異なります。最初に「replaceAll()」を「replace()」に置き換え、次に「replace()」を「substring()」に置き換えました。さて、それはatkretschの逐語的コピーであり、迅速かつ正確に質問に答えました。あなたの答えはそれ以上何も追加しません。削除してください。
Aubin

14
String str = "M1y java8 Progr5am";

deleteCharAt()

StringBuilder build = new StringBuilder(str);
System.out.println("Pre Builder : " + build);
    build.deleteCharAt(1);  // Shift the positions front.
    build.deleteCharAt(8-1);
    build.deleteCharAt(15-2);
System.out.println("Post Builder : " + build);

replace()

StringBuffer buffer = new StringBuffer(str);
    buffer.replace(1, 2, ""); // Shift the positions front.
    buffer.replace(7, 8, "");
    buffer.replace(13, 14, "");
System.out.println("Buffer : "+buffer);

char []

char[] c = str.toCharArray();
String new_Str = "";
    for (int i = 0; i < c.length; i++) {
        if (!(i == 1 || i == 8 || i == 15)) 
            new_Str += c[i];
    }
System.out.println("Char Array : "+new_Str);

8

次のコードを検討してください。

public String removeChar(String str, Integer n) {
    String front = str.substring(0, n);
    String back = str.substring(n+1, str.length());
    return front + back;
}

4

(巨大な)正規表現マシンを使用することもできます。

inputString = inputString.replaceFirst("(?s)(.{2}).(.*)", "$1$2");
  • "(?s)" - 正規表現に通常の文字のように改行を処理するように指示します(念のため)。
  • "(.{2})" - 正確に2文字を集めるグループ$ 1
  • "." - インデックス2の任意の文字(絞り出されます)。
  • "(.*)" - 残りのinputStringを収集するグループ$ 2。
  • "$1$2" - グループ$ 1とグループ$ 2を組み合わせます。

3

文字列を変更するには、不変の文字列を除いて変更可能であるため、StringBuilderについてお読みください。さまざまな操作については、https://docs.oracle.com/javase/tutorial/java/data/buffers.htmlを参照してください。以下のコードスニペットは、StringBuilderを作成してから、指定されたStringを追加し、Stringから最初の文字を削除して、StringBuilderからStringに変換し直します。

StringBuilder sb = new StringBuilder();

sb.append(str);
sb.deleteCharAt(0);
str = sb.toString();

1

StringクラスのreplaceFirst関数を使用します。使用できる置換関数には非常に多くのバリエーションがあります。


1

キャラクターの削除を論理的に制御する必要がある場合は、これを使用してください

String string = "sdsdsd";
char[] arr = string.toCharArray();
// Run loop or whatever you need
String ss = new String(arr);

そのようなコントロールが必要ない場合は、OscarまたはBheshが言及したものを使用できます。彼らはスポットしています。



1

文字列から文字を削除する最も簡単な方法

String str="welcome";
str=str.replaceFirst(String.valueOf(str.charAt(2)),"");//'l' will replace with "" 
System.out.println(str);//output: wecome

1
public class RemoveCharFromString {
    public static void main(String[] args) {
        String output = remove("Hello", 'l');
        System.out.println(output);
    }

    private static String remove(String input, char c) {

        if (input == null || input.length() <= 1)
            return input;
        char[] inputArray = input.toCharArray();
        char[] outputArray = new char[inputArray.length];
        int outputArrayIndex = 0;
        for (int i = 0; i < inputArray.length; i++) {
            char p = inputArray[i];
            if (p != c) {
                outputArray[outputArrayIndex] = p;
                outputArrayIndex++;
            }

        }
        return new String(outputArray, 0, outputArrayIndex);

    }
}

1

ほとんどのユースケースでは、(StringBuilderまたはsubstringすでに回答したように)またはを使用することをお勧めします。ただし、パフォーマンスが重要なコードの場合、これは良い代替策になる可能性があります。

/**
 * Delete a single character from index position 'start' from the 'target' String.
 * 
 * ````
 * deleteAt("ABC", 0) -> "BC"
 * deleteAt("ABC", 1) -> "B"
 * deleteAt("ABC", 2) -> "C"
 * ````
 */
public static String deleteAt(final String target, final int start) {
    return deleteAt(target, start, start + 1);
} 


/**
 * Delete the characters from index position 'start' to 'end' from the 'target' String.
 * 
 * ````
 * deleteAt("ABC", 0, 1) -> "BC"
 * deleteAt("ABC", 0, 2) -> "C"
 * deleteAt("ABC", 1, 3) -> "A"
 * ````
 */
public static String deleteAt(final String target, final int start, int end) {
    final int targetLen = target.length();
    if (start < 0) {
        throw new IllegalArgumentException("start=" + start);
    }
    if (end > targetLen || end < start) {
        throw new IllegalArgumentException("end=" + end);
    }
    if (start == 0) {
        return end == targetLen ? "" : target.substring(end);
    } else if (end == targetLen) {
        return target.substring(0, start);
    }
    final char[] buffer = new char[targetLen - end + start];
    target.getChars(0, start, buffer, 0);
    target.getChars(end, targetLen, buffer, start);
    return new String(buffer);
}

1

* StringBuilderとdeletecharAtを使用して文字列値を削除できます。

String s1 = "aabc";
StringBuilder sb = new StringBuilder(s1);
for(int i=0;i<sb.length();i++)
{
  char temp = sb.charAt(0);
  if(sb.indexOf(temp+"")!=1)
  {                             
    sb.deleteCharAt(sb.indexOf(temp+""));   
  }
}

1

はい。Javaの文字列の個々の文字を削除するための組み込み関数があります。つまり、deleteCharAtです。

例えば、

public class StringBuilderExample 
{
   public static void main(String[] args) 
   {
      StringBuilder sb = new StringBuilder("helloworld");
      System.out.println("Before : " + sb);
      sb = sb.deleteCharAt(3);
      System.out.println("After : " + sb);
   }
}

出力

Before : helloworld
After : heloworld

1

特定のint インデックス文字列strから文字を削除したい場合:

    public static String removeCharAt(String str, int index) {

        // The part of the String before the index:
        String str1 = str.substring(0,index);

        // The part of the String after the index:            
        String str2 = str.substring(index+1,str.length());

        // These two parts together gives the String without the specified index
        return str1+str2;

    }

0
public static String removechar(String fromString, Character character) {
    int indexOf = fromString.indexOf(character);
    if(indexOf==-1) 
        return fromString;
    String front = fromString.substring(0, indexOf);
    String back = fromString.substring(indexOf+1, fromString.length());
    return front+back;
}

0
           BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
   String line1=input.readLine();
   String line2=input.readLine();
         char[]  a=line2.toCharArray();
          char[] b=line1.toCharArray();
           loop: for(int t=0;t<a.length;t++) {

            char a1=a[t];
           for(int t1=0;t1<b.length;t1++) {
               char b1=b[t1];  
               if(a1==b1) {
                   StringBuilder sb = new StringBuilder(line1);
                   sb.deleteCharAt(t1);
                   line1=sb.toString();
                   b=line1.toCharArray();
                   list.add(a1);
                   continue  loop;   
               }


            }

0

私がこの種の質問をするとき、私はいつも「Java Gurusは何をしますか?」と尋ねます。:)

そして、この場合、の実装を調べることでそれに答えString.trim()ます。

以下は、より多くのトリム文字を使用できるようにする、その実装の外挿です。

ただし、元のトリムでは実際にであるすべての文字が削除される<= ' 'ため、これを元のトリムと組み合わせて目的の結果を得る必要がある場合があることに注意してください。

String trim(String string, String toTrim) {
    // input checks removed
    if (toTrim.length() == 0)
        return string;

    final char[] trimChars = toTrim.toCharArray();
    Arrays.sort(trimChars);

    int start = 0;
    int end = string.length();

    while (start < end && 
        Arrays.binarySearch(trimChars, string.charAt(start)) >= 0)
        start++;

    while (start < end && 
        Arrays.binarySearch(trimChars, string.charAt(end - 1)) >= 0)
        end--;

    return string.substring(start, end);
}

0
public String missingChar(String str, int n) {
  String front = str.substring(0, n);

// Start this substring at n+1 to omit the char.
// Can also be shortened to just str.substring(n+1)
// which goes through the end of the string.

String back = str.substring(n+1, str.length());
  return front + back;
}

0

与えられた文字列から単一の文字を削除するには、私のメソッドが便利であることを期待してください。文字列を削除するためにstr.replaceAllを使用しましたが、それらは指定された文字列から文字を削除する多くの方法ですが、私はreplaceallメソッドを好みます。

削除文字のコード:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;


public class Removecharacter 
{

    public static void main(String[] args) 
    {
        String result = removeChar("Java", 'a');
        String result1 = removeChar("Edition", 'i');

         System.out.println(result + " " + result1);

    }


    public static String removeChar(String str, char c) {
        if (str == null)
        {
            return null;
        }
        else
        {   
        return str.replaceAll(Character.toString(c), "");
        }
    }


}

コンソール画像:

コンソールの添付画像を見つけてください、

ここに画像の説明を入力してください

質問してくれてありがとう。:)


0

文字列から文字または文字のグループ削除するこのユーティリティクラスを実装しました。Regexpを使用しないため、高速だと思います。それが誰かを助けることを願っています!

package your.package.name;

/**
 * Utility class that removes chars from a String.
 * 
 */
public class RemoveChars {

    public static String remove(String string, String remove) {
        return new String(remove(string.toCharArray(), remove.toCharArray()));
    }

    public static char[] remove(final char[] chars, char[] remove) {

        int count = 0;
        char[] buffer = new char[chars.length];

        for (int i = 0; i < chars.length; i++) {

            boolean include = true;
            for (int j = 0; j < remove.length; j++) {
                if ((chars[i] == remove[j])) {
                    include = false;
                    break;
                }
            }

            if (include) {
                buffer[count++] = chars[i];
            }
        }

        char[] output = new char[count];
        System.arraycopy(buffer, 0, output, 0, count);

        return output;
    }

    /**
     * For tests!
     */
    public static void main(String[] args) {

        String string = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG";
        String remove = "AEIOU";

        System.out.println();
        System.out.println("Remove AEIOU: " + string);
        System.out.println("Result:       " + RemoveChars.remove(string, remove));
    }
}

これは出力です:

Remove AEIOU: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Result:       TH QCK BRWN FX JMPS VR TH LZY DG

-2

たとえば、文字列に存在するaの数を計算する場合は、次のように実行できます。

if (string.contains("a"))
{
    numberOf_a++;
    string = string.replaceFirst("a", "");
}

2
この回答は質問に対応しておらず、指定された目的に対しても機能しません。置換操作は1回だけ実行されます。
ケンスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.