Java查字符串并替换为字典中的value值
问题:
根据字典对字符串中的字母进⾏替换 ,并打印出所有的可能,使⽤Python会更容易些,直接调⽤字典就可以了。这⾥使⽤Java,并通过Json解析字典。
⽐如说:字典数据为:{‘x’: [‘A’, ‘B’], ‘y’: [‘Y’]},其中 ‘x’ 能够被 ‘A’ 或 'B’替换,‘y’ 能被 'Y’替换。对字符串“xabcy”进⾏处理,替换的所有结果为:AabcY、BabcY
代码
TestData.java
import java.util.Scanner;
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
/**
* 该算法采⽤的是递归的⽅式,数据存储到List中,不过也可以使⽤循环的⽅式,把数据存储到数组中,或者把List和数组结合起来使⽤ */
public class TestData {
private static String dict;// 存储字典数据,测试⽤的,可以通过流的⽅式读取⽂件中的字典数据
private static List<List<String>> handleLists;// 存储待处理的数据
private static List<String> list;// 存储每个字符对应的字典数据
private static Scanner in;// 输⼊数据
private static String str;// 键⼊的字符串
private static String ch;// 保存字符对应的字符串
private static JSONArray arr;// 获取每个字符对应的字典数据
@SuppressWarnings("deprecation")
public static void main(String[] args) {
dict = "{'a': ['B', 'C', 'M'], 'b': ['X','Y']}";
handleLists = new ArrayList<List<String>>();
in = new Scanner(System.in);
try {
// Json解析数据
JSONObject json = new JSONObject(dict);
// 循环键⼊数据及处理
while (true) {
handleLists.clear();
System.out.println("输⼊字符串!");
str = in.next();
for (int i = 0; i < str.length(); i++) {
list = new ArrayList<String>();
ch = String.valueOf(str.charAt(i));
if (json.has(ch)) {
arr = JSONArray(ch);
for (int j = 0; j < arr.length(); j++) {
list.String(j));
}
} else {
list.add(String.valueOf(ch));
}
handleLists.add(list);
}
handleLists = ursitve(handleLists, new ArrayList<List<String>>(), 0, new ArrayList<String>());// 遍历所有的结果
System.out.println("共 " + handleLists.size() + " 个结果");
for (List<String> li : handleLists) {
for (String s : li) {
System.out.print(s);
}
System.out.println();
java valueof}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
遍历数据⼯具包
Utils.java
public class Utils {
/**
* 递归实现对originalLists中所有层数据的遍历,结果放在resultLists中
*
* @param originalLists
* 原始数据
* @param resultLists
* 结果数据
* @param layer
* originalLists的层数
* @param result
* 每次遍历的结果
*/
public static List<List<String>> recursitve(List<List<String>> originalLists, List<List<String>> resultLists, int layer, List<String> result) {
if (layer < originalLists.size() - 1) {
if ((layer).size() == 0) {
recursitve(originalLists, resultLists, layer + 1, result);
} else {
for (int i = 0; i < (layer).size(); i++) {
List<String> list = new ArrayList<String>(result);
list.(layer).get(i));
recursitve(originalLists, resultLists, layer + 1, list);
}
}
} else if (layer == originalLists.size() - 1) {
if ((layer).size() == 0) {
resultLists.add(result);
} else {
for (int i = 0; i < (layer).size(); i++) {
List<String> list = new ArrayList<String>(result);
list.(layer).get(i));
resultLists.add(list);
}
}
}
return resultLists;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论