将字符串转换为字节:getBytes()方法用于将输入字符串转换为字节[]。 方法:
来源
// 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
答案 0 :(得分:0)
您需要跟踪当前字节,如果后面的字节与前一个字节相同,则不要添加以下字节:
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循环。
答案 1 :(得分:0)
执行嵌套循环。 这不使用集合/列表。 在创建结果后将其放置。
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));
示例:欢迎
结果:mo夫
不确定这是否是您的预期答复。
有一种更好的方法,可以使用更少的循环。
答案 2 :(得分:0)
这是我一直在寻找的解决方案
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);
}
}
答案 3 :(得分:-1)
您可以先反转字符串,然后再从字符串中删除多个字符,如下所示:
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;
}
答案 4 :(得分:-2)
您只需要使用以下语法将byte[]
转换为字符串:
System.out.println(new String(result, "UTF-8");