Как удалить один символ из строки

128

Для доступа к отдельным символам строки в Java у нас есть String.charAt(2). Есть ли встроенная функция для удаления отдельного символа строки в java?

Что-то вроде этого:

if(String.charAt(1) == String.charAt(2){
   //I want to remove the individual character at index 2. 
}
Викрам
источник
3
Можете ли вы опубликовать реальный пример, где вы хотите это сделать?
Рохит Джайн
У вас есть заменить, а не удалить. Возможно, вам придется написать свой собственный.
kosa
Вы можете сделать это с coupleиз substringи indexOf. Но это создаст новый строковый объект.
Rohit Jain
StringBuilder - это класс чтения / записи для управления символами. Вы можете создать его из String и использовать sb.toString () для получения результирующей String.
Aubin

Ответы:

228

Вы также можете использовать StringBuilderизменяемый класс.

StringBuilder sb = new StringBuilder(inputString);

У него есть метод deleteCharAt(), наряду со многими другими методами мутатора.

Просто удалите символы, которые вам нужно удалить, и получите следующий результат:

String resultString = sb.toString();

Это позволяет избежать создания ненужных строковых объектов.

Бхеш Гурунг
источник
похоже, ваш ответ здесь не работает ... String numbers = "0123456789"; char c = '2'; numbers = numbers.replace(c, Character.MIN_VALUE); Я хочу заменить символ '' (пустой)
Сураджит Бисвас
73

Одна возможность:

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

Обратите внимание, что результатом является новая строка (а также два промежуточных объекта String), потому что строки в Java неизменяемы.

atkretsch
источник
63

Вы можете использовать метод Java String под названием replace, который заменит все символы, соответствующие первому параметру, вторым параметром:

String a = "Cool";
a = a.replace("o","");
Туи
источник
15

Нет, потому что строки в Java неизменяемы. Вам нужно будет создать новую строку, удалив символ, который вам не нужен.

Чтобы заменить один символ cв позиции индекса idxв строке str, сделайте что-нибудь вроде этого и помните, что будет создана новая строка:

String newstr = str.substring(0, idx) + str.substring(idx + 1);
Оскар Лопес
источник
1
-1: для адресации отдельного символа replaceAll не подходит. Вы не отвечаете на вопрос.
Aubin
1
@Aubin Я обновил свой ответ на замену отдельного символа, не могли бы пересмотреть свой голос против?
Оскар Лопес
Для адресации отдельного символа INDEXED replace () не подходит. Вы не отвечаете на вопрос (перечитайте его). Я не могу снова проголосовать против ...
Обен
1
@Aubin перечитал вторую часть моего ответа, касающуюся этого случая, как и заданный вопрос, теперь как насчет удаления отрицательного голоса? ответ правильный, он просто учитывает один случай, дополнительный к тому, который задан в вопросе.
Оскар Лопес
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);

заменить ()

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[] 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)" - сообщает regexp обрабатывать новые строки как обычные символы (на всякий случай).
  • "(.{2})" - группа $ 1 собирает ровно 2 персонажа
  • "." - любой символ с индексом 2 (выдавить).
  • "(.*)" - группа $ 2, которая собирает остальную часть inputString.
  • "$1$2" - объединение группы $ 1 и группы $ 2.
Боб Геном
источник
3

Чтобы изменить строки, прочитайте о StringBuilder, потому что он изменяемый, за исключением неизменяемого String. Здесь можно найти различные операции 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();
BlizzaN
источник
1

Используйте функцию replaceFirst класса String. Существует так много вариантов функции замены, которые вы можете использовать.

Панкай
источник
1

Если вам нужен некоторый логический контроль над удалением символов, используйте это

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

Если вам не нужен такой контроль, вы можете использовать то, что упомянул Оскар или Бхеш. Они на месте.

Фархан Сайед
источник
1

Используя метод замены, мы можем изменить отдельный символ строки.

string= string.replace("*", "");
Анупам Джайн
источник
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);

    }
}
Sana
источник
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);
}
rmuller
источник
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

Если вы хотите удалить символ из String str по определенному индексу int :

    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;
}
ceph3us
источник
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?» :)

И в данном случае я бы ответил на это, посмотрев на реализацию 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), "");
        }
    }


}

Образ консоли:

пожалуйста, найдите прикрепленное изображение консоли,

введите описание изображения здесь

Спасибо за вопрос. :)

koushick
источник
0

Я только что реализовал этот служебный класс, который удаляет символ или группу символов из String . Я думаю, это быстро, потому что не использует 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
fabiolimace
источник
-2

Например, если вы хотите подсчитать, сколько в String, вы можете сделать это следующим образом:

if (string.contains("a"))
{
    numberOf_a++;
    string = string.replaceFirst("a", "");
}
Леков
источник
2
Этот ответ не отвечает на вопрос и даже не работает для заявленной цели. Операция замены будет запущена только один раз.
Кенстер 05