Rahul Verma:
He encontrado este código para el bombeo caso, pero estoy un poco confundido sobre cómo funciona.
class Main {
private static String swapCase(String s) {
String r = "";
for (char c : s.toCharArray())
r += c ^= 32; // this line
return r;
}
public static void main(String[] args) {
System.out.println(swapCase("Hello"));
}
}
Entendí que se realiza un bucle sobre cada personaje. Sin embargo, no puedo hacerme a la línea (especialmente el operador XOR)
r += c ^= 32;
Me refiero a lo que es el significado de 32
. ¿Cómo se intercambia el caso.
¿Puede alguien ayudarme?
Eugene:
Esta es la forma en ASCII fue puesta a punto.
Carta de a-z
tener el conjunto de bits 6-ésima a 1
; mientras que las cartas de A-Z
tienen el conjunto 6-ésimo bit a 0
.
32 = 100000 // the 6-th bit is set to 1
haciendo un XOR con un int
invertirá que el 6-ésimo bit.
Se podría hacer un poco de depuración y verse a sí mismo:
for (char c : s.toCharArray()) {
System.out.println(Integer.toBinaryString((int) c));
c ^= 32; // this line
System.out.println(Integer.toBinaryString((int) c));
}