我有一个字符串“1 2 3 4 5”..,我想将字符串拆分为stringA“1”和stringB“2 3 4 5”..我知道string.split("\\ ", 1)
返回一个数组,但我有一个用户定义的字符串数量,所以我不想为每个想要拆分的字符串创建一个新数组,然后获取数组的第一个字符串。
我对Java很陌生,所以也许一个更深入的解释/链接解释会很好:)
关于USER-DEFINED的编辑:我有一个字符串'input',它被\\\ n分割,然后将结果放入字符串'wort'的ArrayList中。
我现在想进一步将'wort'的每个条目分成两个新的ArrayLists'wortFirst'和'wortRemaining'。
所有这些因为我正在编写一个词汇助手。它显示了wortFirst,然后按下解决方案按钮wortFirst在wortRemaining中的对应物。我计划通过一个对于wortFirst(.get(i))和wortRemaining(.get(i))
的int i来做到这一点。答案 0 :(得分:0)
看起来你正在尝试创建可以拆分的字典
keyWord rest of the line
进入keyWord
和rest of the line
。
所以我要说我的应用程序可以读取input.txt
文件,其内容看起来像
foo description of foo
bar very long description of bar
将其放入地图的代码可以如下所示:
//I will fill my list with lines from file
List<String> lines = Files.readAllLines(Paths.get("input.txt"));
Map<String, String> dictionary = new LinkedHashMap<>();
// LinkedHashMap - preserves order of insertion
// if you don't need to preserve it use HashMap
// if you want to sort elements by value of key
// use TreeMap
//lets split each line to key and value like you already do
//and put it into dictionary
for (String line : lines){
String[] tokens = line.split("\\s+",2); //split on one (or more continues whitespaces)
//but limit size of array to 2
dictionary.put(tokens[0], tokens[1]); //I assume "rest of the line" is mandatory,
//otherwise tokens[1] will not exist
}
您可以通过迭代其条目集(所有键值对)来打印生成的地图的内容:
//lets print content of map
for (Map.Entry<String, String> pair : dictionary.entrySet()){
System.out.println(pair.getKey()+" -> "+pair.getValue());
}
现在要从地图中获取单个元素,我们可以使用get(key)
,如果地图中不存在关键字,则返回null
,因此如果您想避免null
,可以使用getOrDefault(key, alternativeValue)
key
因此,如果alternativeValue
不存在,地图将返回String definition = dictionary.get("foo");
//if you want to return some predefined value in case "foo" will not be
//present in dictionary you can use:
//String definition = dictionary.getOrDefault("foo","--there is no such word in dictionary--");
System.out.println("definition for key \"foo\" is: "+definition);
:
foo -> description of foo
bar -> very long description of bar
definition for key "foo" is: description of foo
输出:
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
要运行此示例,您将需要这些类
Map
您的IDE应该能够为您生成此导入(在Eclipse中使用 Ctrl + Shift + O )
更新
不幸的是get(index)
没有List
方法。但是,当您使用键值对填充数组时,您可以创建Map.Entry
个size
元素,这些元素具有get
和Random r = new Random();
List<Map.Entry<String, String>> allPairs = new ArrayList<>(dictionary.entrySet());
// list will be filled with content from this set ^^^^^^^^^^^^^^^^^^^^^
int randomIndex = r.nextInt(allPairs.size());
Map.Entry<String, String> randomEntry = allPairs.get(randomIndex);
System.out.println(randomEntry.getKey());
System.out.println(randomEntry.getValue());
方法。要做到这一点,你可以简单地使用复制构造函数,如
{{1}}