我想在Java中反转一个字符串并删除和复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想在Java中反转一个字符串并删除和复制相关的知识,希望对你有一定的参考价值。

将字符串转换为字节:getBytes()方法用于将输入字符串转换为bytes []。方法:

  1. 创建一个长度等于输入字符串长度的临时byte []。
  2. 将字节(我们通过使用getBytes()方法得到的)以相反的顺序存储到临时字节[]中。
  3. 使用byte []创建一个新的String对象来存储结果。

资源

// Java program to ReverseString using ByteArray. 
import java.lang.*; 
import java.io.*; 
import java.util.*; 

// Class of ReverseString 
class ReverseString 
{ 
    public static void main(String[] args) 
    { 
        String input = "Geeks"; 

        // getBytes() method to convert string  
        // into bytes[]. 
        byte [] strAsByteArray = input.getBytes(); 

        byte [] result =  
                   new byte [strAsByteArray.length]; 

        // Store result in reverse order into the 
        // result byte[] 
        for (int i = 0; i<strAsByteArray.length; i++) 
            result[i] =  
             strAsByteArray[strAsByteArray.length-i-1]; 

        System.out.println(new String(result)); 
    } 
} 

我希望输出为:skeg

答案

您需要跟踪当前字节,如果它与前一个字节相同,则不添加以下字节:

String input = "Geeks";
byte[] strAsByteArray = input.getBytes(); 
List<Byte> list = new ArrayList<>();
//byte[] result = new byte[strAsByteArray.length];
byte prev = 0;

for (int i=0; i < strAsByteArray.length; i++) {
    byte curr = strAsByteArray[strAsByteArray.length-i-1];
    if (curr != prev) {
        prev = curr;
        list.add(curr);
    }
}

byte[] result = new byte[list.size()];
for (int i=0; i < list.size(); ++i) {
    result[i] = list.get(i);
}

System.out.println(new String(result));

这打印:

skeG

请注意,我最初使用列表来存储字节,因为在我们反向解析整个字符串之前,我们实际上并不知道固定字节数组的最终大小。我想找到一种方便的方法,使用流将List<Byte>转换为原始字节数组。失败了,我只使用了增强的for循环。

另一答案

做嵌套循环。这不使用集合/列表。在创建结果后放置它。

byte[] finalResult = new byte[result.length];
int k = 0;

for (int i = 0; i < result.length; i++) {
    boolean hasDuplicates = false;

    for (int j = i + 1; j < result.length; j++) {
        if (result[i] == result[j]) {
            hasDuplicates = true;
        }
    }

    if (!hasDuplicates) {
           finalResult[k++] = result[i];
    }
}

System.out.println(new String(finalResult));

示例:welcome

结果:moclew

不确定这是否是您的预期回复。


使用更少的循环有一个更好的方法。

另一答案

这是我正在寻找的解决方案

    public class CodeExercise

{

public static void main(String[] args)
{
    String input = "abbac";

    char[] strArr= input.toCharArray();

  String result = "";

  // Reverse
  for(int i = strArr.length -1; i>=0; i--){
      result = result + strArr[i];

  }
  result = removeDuplicate(result.toCharArray());
  System.out.println(new String(result));
}

 // Collapsing any adjacent duplicate characters
public static String removeDuplicate(char[] chars)
{
    char prev = '\0';
    int x = 0;

    for (int i = 0; i < chars.length; i++)
    {
        if (prev != chars[i]) {
            chars[x++] = chars[i];
            prev = chars[i];
        }
    }

    return new String(chars).substring(0, x);
}

}

另一答案

你可以先反转字符串然后你可以从字符串中删除多个字符,如下所示:

  public static void main(String[] args) {
    String input = "Geeks";
    String input2 = reverseString(input);
    StringBuilder input3 = getString(input2);
    System.out.println(new String(input3));
  }

  private static String reverseString(String input) {
    StringBuilder input1 = new StringBuilder();

    // append a string into StringBuilder input1
    input1.append(input);

    // reverse StringBuilder input1
    input1 = input1.reverse();
    return new String(input1);
  }

  private static StringBuilder getString(String input2) {
    StringBuilder input3 = new StringBuilder();
    ArrayList<Character> usedChars =  new ArrayList<>();

    for (char ch: input2.toCharArray()) {
      if (!usedChars.contains(ch)){
        input3.append(ch);
        usedChars.add(ch);
      }
    }
    return input3;
  }
另一答案

您只需要使用以下语法将byte[]to转换为字符串:

System.out.println(new String(result, "UTF-8");

以上是关于我想在Java中反转一个字符串并删除和复制的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题Java实现单词反转真题+解题思路+代码(2022&2023)

删除列表中的项目并获取新列表? [复制]

从 xml 片段中删除 html 标签? [复制]

如何删除字符串的 HTML 元素? [复制]

如何 grep 字符串的目录,将其重写为其他内容并保存在 bash 中? [复制]

10个JavaScript代码片段,使你更加容易前端开发。