0

如果我有一个.txt名为的文件animals,其中包含fishfroggoat等,而另一个名为owners的文件类似于:

fish:jane
frog:mark
goat:joe

我该如何将宠物与主人配对?我相当肯定 HashMap 在这里会很好,但我被困住了。我将动物文本放入一个字符串中,但我不知道如何正确地将其分解为 4 个字符。

任何帮助都会很棒。

抱歉,我没有添加任何代码,但感谢你们(尤其是 Ted Hopps)的帮助,我解决了问题,更重要的是,理解了它。:-)

4

3 回答 3

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)

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

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];
于 2013-09-18T07:23:15.013 回答
0

这就是您如何在一行中将字符串拆分为 4 个字符的块:

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

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

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

(?<=\\G....)
  • 该构造(?<=regex)是正则表达式的“正向向后看”,这意味着字符之间输入中的点之前的字符(因为向后看是零宽度)必须与正则表达式匹配。
  • 正则表达式\G(编码为\\Gjava 字符串常量)表示“前一个匹配的开始”,但最初也匹配输入的开始。
  • 正则表达式....匹配任意 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]
于 2013-09-18T13:40:53.597 回答
0

使用下面给出的字符串拆分。

字符串味精=鱼:简;msg.split(":")

然后它将用“:”分隔数组。

于 2013-09-18T09:02:25.493 回答