我正在尝试将字符串转换为整数字符串表示形式,然后将其转换回来 我会详细解释这个要求
假设我有一个密码字符串“abc”,我想将其转换为每个字符“097098099”的ascii值字符串 然后我想把它转换回字符串“abc”
在c中,这可以使用sprintf和scanf轻松完成,但在Java中我很困惑。 谢谢。
答案 0 :(得分:0)
使用此方法转换为源字符串的Ascii表示形式:
public static void main(String[] args) {
String source = "abc";
String dest = convertToAsciiString(source);
System.out.println(dest);
}
public static String convertToAsciiString(String source) {
String dest = "";
int index = 0;
while (index < source.length()) {
char c = source.charAt(index);
int charAscii = c;
dest += (charAscii >=100 ?charAscii : "0" + charAscii);
index++;
}
return dest;
}
答案 1 :(得分:0)
将更大的问题分解为更小的问题。单独解决每个较小的问题,然后将小解决方案结合到整个问题的大解决方案中。
在这种情况下,我可以看到两个较小的问题需要解决:
将单个ASCII字符转换为整数表示。
将整数表示法合并到整个字符串
这有家庭作业的感觉,所以我不会为你写一个程序,但我会帮助一些伪代码:
myString <- "abc"
newString <- ""
for each character thisChar in myString
// Here "&" is the string concatenation operator
newString <- newString & convertToInteger(thisChar)
endfor
return newString
这不是Java,并且您应该在Java版本中使用许多特定于Java的调整。如果你自己找到它们,你会更好地学习它们。您可以从查看StringBuilder
类的Javadoc开始。
答案 2 :(得分:0)
你可以这样做,这是转换为ASCII字符串的int表示的方法,按照这个例子,你可以自己编写反向方法,然后以相反的方式进行转换。
public static String convertToIntString(String str) {
StringBuilder builder = new StringBuilder(str.length() * 3);
str.chars().map(c -> (int)c).forEach(i -> builder.append((Integer.toString(i).length() == 2 ? Integer.toString(i).length() == 1 ? "00" : "0" : "") + i));
return builder.toString();
}
forEach(...)
中的代码是为了确保char是用三位数写的(
097
而不是97
)
请注意我编写的代码使用Java Stream API,因此只有安装了Java 8才能工作。