[RESOLVIDO] Inversão de String em Java

Olá, boa noite,

Sou novo em Java e estava querendo aprender mais sobre java e me deparei com um exercício que não consigo resolver.
Preciso inverter uma String de números sendo que preciso manter a ordem de 2 caracteres e inverter sucessivamente. Por exemplo:

public class Teste{
public static void main(String[] args) {

	String t = "99E65A78";

// A saída deveria ser 785AE699.

Sei deste método para inverter Strings, mas o mesmo inverte tudo, não mantendo a ordem de 2 caracteres.

StringBuffer sb = new StringBuffer(t);
sb.reverse();
System.out.println(sb);

Agradeço a quem puder ajudar!!

Nunca precisei disso, dá uma olhada no código:

public class StringDemo {
  public static void main(String[] args) {
    String palindrome = "Dot saw I was Tod";
    int len = palindrome.length();
    char[] tempCharArray = new char[len];
    char[] charArray = new char[len];
    // put original string in an array of chars
    for (int i = 0; i < len; i++) {
      tempCharArray[i] = palindrome.charAt(i);
    }
    // reverse array of chars
    for (int j = 0; j < len; j++) {
      charArray[j] = tempCharArray[len - 1 - j];
    }
    String reversePalindrome = new String(charArray);
    System.out.println(reversePalindrome);
  }
}

fonte: Inverter uma String

Então amigo, nesse caso este programa retorna a String completamente ao contrário. Por exemplo “99E65A78” está retornando “87A56E99”, quando na verdade deveria retornar “785AE699”. Este código equivale a este aqui…

public class LittleEndian {
public static void main(String[] args) {

	String t = "99E65A78";
	
	StringBuffer sb = new StringBuffer(t);
	sb.reverse();
	System.out.println(sb);

Estou com dificuldade em deixar como retorno a String “785AE699”, ou seja, invertendo de 2 em 2 caracteres.

Boa noite, amigo.

Gostei desse desafio e fiz um método que faz exatamente isso, espero que ajude no seu aprendizado:

public class Programa {

public static void main(String[] args){
    String t = "99E65A78";
    Programa p = new Programa();
    System.out.println(p.dinamicInverter(2, 2, t));
}

/**
 * Este método inverte a string de forma dinâmica mantendo a posição de
 * caracteres no fim da string e invertendo o restante na quantidade
 * especificada.
 *
 * <html>
 *     <p>Exemplo:</p>
 *     <p>manter = 2, invertQuant = 2, string = "99E65A78"</p>
 *     <p>Saída: 785AE699</p>
 * </html>
 *
 * @param manter Quantidade de caracteres a se manter
 * @param invertQuant Quantidade de caracteres a inverter
 * @param string String que será invertida
 * @return String invertida como solicitado
 */
public String dinamicInverter(int manter, int invertQuant, String string){
    manter = manter < 0 ? 0 : manter;
    invertQuant = invertQuant <= 0 ? 1 : invertQuant;
    String resultado = string.substring(string.length() - manter, string.length());
    String str = string.substring(0, string.length() - manter);
    while(str.length() > 0){
        if((str.length() - invertQuant) < 0){
            resultado += str.substring(0, str.length());
            break;
        }
        resultado += str.substring(str.length() - invertQuant, str.length());
        str = str.substring(0, str.length() - invertQuant);
    }
    return resultado;
}
}

Boa sorte a todos. :metal::sunglasses::metal:

2 curtidas

Porra villagram… Vc não perde uma mano kkkkkk. Todos os posts o cara manja de alguma coisa. Parabéns mesmo!

Uau Villagram era exatamente isso!! Muito bonito o código e com certeza vou estudar ele para aprender mais!! Muito obrigado a você e a todos que ajudaram!!

Um abraço.

Muito obrigado amigo, também gosto dos seus posts, seus códigos tbm são muito bons. Eu sempre procuro alguma post que ninguém respondeu ou que não encontraram a solução, quando você tenta resolver, mesmo que seja um problema pequeno e tbm as vezes em uma linguagem que você não domina, você cresce mais do que estudando documentação.

:metal::sunglasses::metal:

3 curtidas

Bom aprendizado fera, ainda bem que consegui ajudar. :metal::sunglasses::metal:

Só por curiosidade, estás fazendo um conversor de BIG ENDIAN para LITTLE ENDIAN e vice-versa?