(Java)子串&使用hashmap从两个文件中读取数据

时间:2013-09-18 07:16:09

标签: java hashmap substring

如果我有一个名为.txt的{​​{1}}文件中包含animals等文件,另一个文件名为fishfroggoat,其中包含以下内容:

owners

我怎么能将宠物与其主人配对?我很确定HashMap在这里会很好,但是我被卡住了。我将动物文本放入一个字符串中,但我不知道如何将其分解为4个字符。

任何帮助都会很棒。

抱歉,我没有添加任何代码,但多亏了你们的帮助(特别是Ted Hopps),我把它解决了,更重要的是,理解它。 : - )

3 个答案:

答案 0 :(得分:1)

有各种方法。最直接的方法是使用substring方法将其拆分:

String animals = "fishfroggoat";
String fish = animals.substring(0, 4);
String frog = animals.substring(4, 8);
String goat = animals.substring(8); // or (8, 12)

如果你有一个任意长的四字符动物列表,你可以这样做:

String animals = "fishfroggoatbear";
int n = animals.length() / 4;
String[] animalArray = new String[n];
for (int i = 0; i < n; ++i) {
    animalArray[i] = animals.substring(4*i, 4*i + 4);
}

您可以使用split分割宠物/所有者字符串:

String rawData = "fish:jane";
String[] data = rawData.split(":");
String pet = data[0];
String owner = data[1];

答案 1 :(得分:0)

使用字符串拆分,如下所示。

String msg = fish:jane; msg.split( “:”)

然后它将使数组分开“:”。

答案 2 :(得分:0)

这就是你将字符串分成一行只包含4个字符的方法:

String[] animals = input.split("(?<=\\G....)");

这可能看起来像黑魔法,所以我会试着揭开它的神秘面纱。欢迎来到正则表达的黑暗艺术......

String.split()方法将每次匹配的字符串拆分为指定的正则表达式。那么让我们看一下正则表达式:

(?<=\\G....)
  • 构造(?<=regex)是正则表达式的“正面看法”,意味着输入字符之间的点之前的字符(因为后面看是零宽度)必须要求正则表达式。
  • 正则表达式\G(编码为\\G作为java String常量)表示“上一次匹配的开始”,但最初也匹配输入的开始。
  • 正则表达式....匹配任意4个字符。

因此,当用英语表示时,正则表达式(?<=\\G....)表示“在每个字符之后”。

如果有人有兴趣,删除\G并拆分(?<=\....)会导致它在第4个=之后拆分每个字符 - 它只是意味着“前面有4个字符” - 您需要\G才能找到4个字符。


这是一些测试代码:

public static void main(String[] args) throws Exception {
    String input = "fishfroggoatbear";
    String[] animals = input.split("(?<=\\G....)");
    System.out.println(Arrays.toString(animals));
}

输出:

[fish, frog, goat, bear]