2011-09-29 57 views
-2

這是一個代碼,它接收ASCII表中所有打印字符的數組。我試圖讓整個字符串形式的任何字符串消息(例如字符串「aba」轉換爲97098097可以放回到它原來的字符串形式.100101101可以採取並回到「dee」。我'已經真的用這種方法很努力,但似乎並不奏效,尤其是當它涉及到數字和這種請幫助我。這是Java的方式,我使用的Eclipse。從隨機整數到實際字符串

public static String IntToString(){ 


int n = 0; 
String message = ""; 
String message2 = null; 
String [] ASCII = {" ","!","\"","#","$","%","&","\'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"}; 
String IntMessage = result.toString(); 
String firstChar = IntMessage.substring(0,2); 
if (IntMessage.substring(0,1)=="1" && IntMessage.length()%3==0) 
{ 
    for (int x = (IntMessage.length() % 3 - 3) % 3; x < IntMessage.length()-2; x += 3) 
     n = Integer.parseInt(IntMessage.substring(Math.max(x, 0), x + 3)); 
     message=message.concat(ASCII[n-31]); 
return message; 
} 
else if (IntMessage.length()%3==2) 
message2=ASCII[(Integer.parseInt(firstChar))-31]; 
     for (int x = 2; x < IntMessage.length()-2; x += 3) 
      n = Integer.parseInt(IntMessage.substring(x, x + 3)); 
      message=message2+=ASCII [n - 31]; 
return message; 
+0

什麼問題? –

+0

呃...爲什麼?你想用這個做什麼?有GOT是一個更好的方法來解決你的根本問題。 –

+0

我知道我正在爲一個項目做這件事,但我不能讓它工作,我想要的只是: 97098097 =>「aba」就是這樣。 – user969334

回答

1

會似乎是你的編碼方案,呃,瘋了。

首先,你需要一個字符串的ASCII值,然後採取ASCII值的字符表示,然後將其存儲爲一個字符串。

所以"abc" => {97, 98, 99} => "979899".

但由於您使用的ASCII碼,它可以有100個或多個值,你用0填充你的整數,如果他們是100下:

"abc" => {97, 98, 99} => {"097", "098", "099"} => "097098099" 

但是你決定這樣做只是有時,因爲不知何故

"aba" => "97098097" 

也就是說,第一個「一」變成「97」,但最後「一」變成「097」。

我想說你應該先修復你的編碼方案。

此外,這些有希望不是「隨機整數」,因爲你試圖把它們變成明智的字符串。否則,像base64這樣的簡單映射就會很容易將任何整數映射到字符串,但它們可能沒有多大意義。

事實上,他們甚至不是真正的整數。您將編碼的字符串存儲爲字符串。

0
public static void main(String[] srgs){ 
    String aaa = "100101101"; 
    String[] a = split(aaa, 3); 

    String s = ""; 

    for(int i=0;i<a.length;i++){ 
     char c = (char)Integer.parseInt(a[i]); 
     s += Character.toString(c); 
    } 
    System.out.println(s); 
} 

public static String[] split(String str, int groupIndex){ 
    int strLength = str.length(); 
    int arrayLength = strLength/groupIndex; 
    String[] splitedArray = new String[strLength/groupIndex]; 

    for(int i=0;i<arrayLength;i++){ 
     String splitedStr = str.substring(0, groupIndex); 
     str = str.substring(groupIndex, str.length()); 
     arrayLength = str.length(); 
     splitedArray[i] = splitedStr; 
    } 
    return splitedArray; 
} 

最重要的是,ASCII字符串隱蔽了Char值,比它在字符串中變成真正的字符值。在這種情況下,需要由3修復的ASCII碼長度會有幫助。