我想在Java中反转一个字符串并删除和复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想在Java中反转一个字符串并删除和复制相关的知识,希望对你有一定的参考价值。
将字符串转换为字节:getBytes()方法用于将输入字符串转换为bytes []。方法:
- 创建一个长度等于输入字符串长度的临时byte []。
- 将字节(我们通过使用getBytes()方法得到的)以相反的顺序存储到临时字节[]中。
- 使用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)