2016-04-01 8 views
0

Bir dizeyi unicode'a dönüştüren ve daha sonra yeni bir dize oluşturmak için unicode değerine 2 ekleyen bir uygulama yazmam gerekiyor. giriş iseBir dizgiyi kodlama ve kod çözme

Temelde,: şifre RhYxtz, daha sonra çıkış gibi görünmelidir:

public static void main(String[] args){ 

    System.out.print ("Enter text: "); 
    Scanner scan = new Scanner(System.in); 
    String text = scan.nextLine(); 

    int length = text.length(); 

    for(int i = 0; i < length; i ++){ 
     char currentChar = text.charAt(i); 
     int currentChar2 = currentChar+2; 
     String s = String.format ("\\u%04x", currentChar2); 
     System.out.println ("Encoded message: " + s); 
    } 

} 

sorun şudur: ku TjAzvb

Aşağıdaki kod var bugüne kadar ne rcuuyqtf Unicode'u bir harf dizesine nasıl dönüştürebileceğimi ve biçimin girişle aynı şekilde nasıl saklanacağını bilmiyorum. Biri bana yardım edebilir mi? Teşekkürler.

import java.util.Scanner; 
public class Example { 
    public static void main(String[] args) { 
      System.out.print ("Enter text: "); 
      Scanner scan = new Scanner(System.in); 
      String text = scan.nextLine(); 
      int length = text.length(); 
      String s = ""; 

    for(int i = 0; i < length; i ++){ 
     char currentChar = text.charAt(i); 
     if (currentChar == ' '){ 
      s += currentChar; 
     } else { 
      s += (char) (currentChar + 2); 
     } 
    } 
      System.out.println ("Encoded message: " + s); 
    } 
} 
+1

Strings Unicode zaten. Özellikle tüm karakterleriniz ASCII aralığındaysa, hiç dönüşüm yapmanız gerekmez. – RealSkeptic

+0

bir dizeyi kodlama ve kodlama ??? veya bir dizgiyi kodlamak ve çözmek. Https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String(byte[],%20java.nio.charset.Charset 'yi kullanabilirsiniz. – StackFlowed

cevap

0

bu deneyin.

Java char (2 bayt) UTF-16'dır ve int değerleri her zaman bir Unicode sembolü aka kod noktası değildir.

+0

Yanıtın eklenmesi : siz yaptığınız gibi, tamsayıları kullanarak unicode karakterleri işleyebilirsiniz, ancak veri türü int değil, bir char olacaktır. Ayrıca bir karakter dizisine bir char dökülebilir. ;-) – rafaelbattesti

+1

çıktı rcuuyqtf olur "ku" Tj [zv | rcuuyqtf ku TjAzvb yerine. Boşluğu tutup y ve z'yi a ve b'ye dönüştürmenin bir yolu var mı? – bt203

+0

@ bt203 Elbette yapabilirsin, ama bu, eklemiyorsun diye istediğin şey hakkında kafam karışıyor. 2. Boşluğu korumak için bir if ifadesi ve 'Character.isWhitespace()' kullanın. Y ve z üzerinde “döngüsel taşma” olması için başka bir ifade kullanın. –

0

Unicode kod noktaları olarak java 8 toplanabilir:

public static String encryped(String s) { 
    int[] cps = s.codePoints() 
      .mapToInt((cp) -> cp + 2) 
      .toArray(); 
    return new String(cps, 0, cps.length); 
} 

veya önceki sürümlerinde codePointAt ile bir döngü içinde

0

Bu ABD ASCII harfleri çalışması gerekir: Java

StringBuilder buf = new StringBuilder(length); 

for(int i = 0; i < length; i ++){ 
    char currentChar = text.charAt(i); 
    if (currentChar < 128 && Character.isLetter(currentChar)) { 
     if (currentChar == 'y' || currentChar == 'z' 
       || currentChar == 'Y' || currentChar == 'Z') { 
      buf.append((char) (currentChar + 2 - 26)); 
     } else { 
      buf.append((char) (currentChar + 2)); 
     } 
    } else { 
     buf.append(currentChar); 
    } 
} 
System.out.println(buf.toString()); 
+0

Bu çalışır. Teşekkürler! – bt203

+0

Tabii ki, 2 ve 26 sabitleri beyan etmeliyim. Statik final int alphabetLength = ('z' - 'a') + 1; gibi bir şey; Lütfen cevabı kabul edildi/doğru/yardımcı olarak işaretleyin, thx. :-) –