[RESOLVIDO] Inversão de String em Java

8 respostas
java
G

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!!

8 Respostas

R

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

G

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.

V

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:

R

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

G

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.

V

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:

V

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

S

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

Criado 19 de janeiro de 2019
Ultima resposta 20 de jan. de 2019
Respostas 8
Participantes 4