为字符串中的每个字符分配一组新字符
Assigning each character within a String a new set of characters
我正尝试在我的 Android 应用程序中添加一项功能,允许用户输入一些文本,比方说 "testing",当他们点击程序读取文本,将其转换为字符串,然后为每个字符分配一个新值并将这些值显示在屏幕上。例如 "testing",程序会将其更改为 "t e s t i n g"。然后它需要改变字符的值,所以
"t e s t i n g"
可以变成 "ta ea sa t a ia na ga.
所以基本上我需要:
- 将原始 字符串 分解为单独的 个字符 。
- 将所有 个字符的值 更改为新值 (示例:a = abc,b = bcd,c = wxy)
- 在屏幕上的 TextView 中显示新值。
如果您需要有关我的问题的更多信息,请随时在评论中提问。非常感谢所有帮助!!
编辑:
下面是我将实际使用的代码的一个小示例
"a" = "o9Q5QD8gT8"
"A" = "x5h10vc4jd15"
"1" = "S7J11IH4yK16"
我的代码类似于显示的所有字母 (a-z) 大小写、所有数字 (0-9) 和所有额外字符的代码
Hi i think this may work.
class Stack {
public static void main(String args[])
{
String character="testing";
for(int i=0;i<character.length();i++)
{
char a=character.charAt(i);
switch(a)
{
case 't':System.out.print(a+"a");
break;
case 'e':System.out.print(a+"a");
break;
case 's':System.out.print(a+"a");
break;
case 'i':System.out.print(a+"a");
break;
case 'n':System.out.print(a+"a");
break;
case 'g':System.out.print(a+"a");
break;
default:System.out.print("OUT");
break;
}
}
}
}
这个有效:
import java.util.*;
public class Translator {
private static final Map<Character, String> translations = new HashMap<>();
static {
translations.put('a', "o9Q5QD8gT8");
translations.put('A', "x5h10vc4jd15");
translations.put('1', "S7J11IH4yK16");
}
public static void main(final String[] args) {
System.out.println(translate("abcABC123"));
}
private static String translate(final String input) {
final StringBuilder sb = new StringBuilder();
for (final char c : input.toCharArray()) {
sb.append(translate(c));
}
return sb.toString();
}
private static String translate(final char c) {
String translation = translations.get(c);
if (translation == null) {
translation = Character.toString(c);
}
return translation;
}
}
输出:
o9Q5QD8gT8bcx5h10vc4jd15BCS7J11IH4yK1623
此解决方案迭代输入字符串的字符并在静态映射中查找它们。如果该字符作为 Map 中的键出现,则关联值用作翻译值,否则使用原始字符。 StringBuider 用于按顺序附加翻译值。
请注意,像这样使用静态地图通常不是一个好的长期解决方案。 Map 中的键和值可能需要在某处进行管理,例如在数据库或属性文件中。
编辑:从属性文件读取的修改版本。
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Translator {
private static final String PROPERTIES_FILE_NAME = "translations.properties";
private final Properties translations = new Properties();
public Translator() {
// Below is the try-with-resources syntax, available since 1.7
// See: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
try (InputStream input = Translator.class.getResourceAsStream(PROPERTIES_FILE_NAME)) {
System.out.println(input);
translations.load(input);
} catch (final IOException e) {
throw new RuntimeException(e);
}
}
public static void main(final String[] args) {
final Translator translator = new Translator();
System.out.println(translator.translate("abcABC123"));
}
private String translate(final String input) {
final StringBuilder sb = new StringBuilder();
for (final char c : input.toCharArray()) {
sb.append(translate(c));
}
return sb.toString();
}
private String translate(final char c) {
String translation = translations.getProperty(String.valueOf(c));
if (translation == null) {
translation = Character.toString(c);
}
return translation;
}
}
创建一个包含以下内容的文件 'translations.properties' 并确保它在类路径中。
a=o9Q5QD8gT8
A=x5h10vc4jd15
1=S7J11IH4yK16
我正尝试在我的 Android 应用程序中添加一项功能,允许用户输入一些文本,比方说 "testing",当他们点击程序读取文本,将其转换为字符串,然后为每个字符分配一个新值并将这些值显示在屏幕上。例如 "testing",程序会将其更改为 "t e s t i n g"。然后它需要改变字符的值,所以 "t e s t i n g" 可以变成 "ta ea sa t a ia na ga.
所以基本上我需要:
- 将原始 字符串 分解为单独的 个字符 。
- 将所有 个字符的值 更改为新值 (示例:a = abc,b = bcd,c = wxy)
- 在屏幕上的 TextView 中显示新值。
如果您需要有关我的问题的更多信息,请随时在评论中提问。非常感谢所有帮助!!
编辑: 下面是我将实际使用的代码的一个小示例
"a" = "o9Q5QD8gT8"
"A" = "x5h10vc4jd15"
"1" = "S7J11IH4yK16"
我的代码类似于显示的所有字母 (a-z) 大小写、所有数字 (0-9) 和所有额外字符的代码
Hi i think this may work.
class Stack {
public static void main(String args[])
{
String character="testing";
for(int i=0;i<character.length();i++)
{
char a=character.charAt(i);
switch(a)
{
case 't':System.out.print(a+"a");
break;
case 'e':System.out.print(a+"a");
break;
case 's':System.out.print(a+"a");
break;
case 'i':System.out.print(a+"a");
break;
case 'n':System.out.print(a+"a");
break;
case 'g':System.out.print(a+"a");
break;
default:System.out.print("OUT");
break;
}
}
}
}
这个有效:
import java.util.*;
public class Translator {
private static final Map<Character, String> translations = new HashMap<>();
static {
translations.put('a', "o9Q5QD8gT8");
translations.put('A', "x5h10vc4jd15");
translations.put('1', "S7J11IH4yK16");
}
public static void main(final String[] args) {
System.out.println(translate("abcABC123"));
}
private static String translate(final String input) {
final StringBuilder sb = new StringBuilder();
for (final char c : input.toCharArray()) {
sb.append(translate(c));
}
return sb.toString();
}
private static String translate(final char c) {
String translation = translations.get(c);
if (translation == null) {
translation = Character.toString(c);
}
return translation;
}
}
输出:
o9Q5QD8gT8bcx5h10vc4jd15BCS7J11IH4yK1623
此解决方案迭代输入字符串的字符并在静态映射中查找它们。如果该字符作为 Map 中的键出现,则关联值用作翻译值,否则使用原始字符。 StringBuider 用于按顺序附加翻译值。
请注意,像这样使用静态地图通常不是一个好的长期解决方案。 Map 中的键和值可能需要在某处进行管理,例如在数据库或属性文件中。
编辑:从属性文件读取的修改版本。
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Translator {
private static final String PROPERTIES_FILE_NAME = "translations.properties";
private final Properties translations = new Properties();
public Translator() {
// Below is the try-with-resources syntax, available since 1.7
// See: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
try (InputStream input = Translator.class.getResourceAsStream(PROPERTIES_FILE_NAME)) {
System.out.println(input);
translations.load(input);
} catch (final IOException e) {
throw new RuntimeException(e);
}
}
public static void main(final String[] args) {
final Translator translator = new Translator();
System.out.println(translator.translate("abcABC123"));
}
private String translate(final String input) {
final StringBuilder sb = new StringBuilder();
for (final char c : input.toCharArray()) {
sb.append(translate(c));
}
return sb.toString();
}
private String translate(final char c) {
String translation = translations.getProperty(String.valueOf(c));
if (translation == null) {
translation = Character.toString(c);
}
return translation;
}
}
创建一个包含以下内容的文件 'translations.properties' 并确保它在类路径中。
a=o9Q5QD8gT8
A=x5h10vc4jd15
1=S7J11IH4yK16