从其他字符串中拆分第一个字符

时间:2015-03-12 17:45:52

标签: java arrays string

我有一个字符串“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来做到这一点。

1 个答案:

答案 0 :(得分:0)

看起来你正在尝试创建可以拆分的字典

keyWord rest of the line

进入keyWordrest 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.Entrysize元素,这些元素具有getRandom 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}}