java - 从字符串数组中获取所有可能的名称组合?

标签 java arrays loops

我有一些代码,它采用已经用句点 (nameStr) 分隔的名称字符串并将其分解为字符串数组:

public static String doc;

public static void buildNameChoices (String whichName, String nameStr)
{
    String[] nameArray= nameStr.split("\\.", -1);

    for(int i=0; i < (nameArray.length); i++){
        nameArray[i]= nameArray[i]+".";
        System.out.println(nameArray[i]);
    }

第二部分将句点添加回每个数组元素中,因为它们将在输出中重新连接在一起。我试图用它来创建用户可以选择的所有可能的名称组合的列表。我们唯一不必担心的是较高的元素不能出现在较低的元素之前(例如,第二个元素不会出现在第一位,而第一个元素不会出现在第一位,等等)。换句话说,它将是“n”,然后是“n”之后的所有可能的组合。

所以,如果我有字符串“von.del.smith.john.james”,选择可能是:

冯.德尔

冯·史密斯

冯·约翰

冯·詹姆斯

冯·德尔·史密斯

冯.史密斯.约翰

冯·史密斯·詹姆斯

等等等等

我对如何做到这一点很困惑。算法不是我的强项。

最佳答案

这个问题可以用递归来解决。一种可能的实现如下所示:

public static void buildNameChoicesHelper(String[] nameArray, int nameIndex,
    String str) {

  if(nameIndex >= nameArray.length) {
    if(str.length() > 0) {
      System.out.println(str.substring(0, str.length() - 1));
    }
  }
  else {
    buildNameChoicesHelper(nameArray, nameIndex + 1, str);
    buildNameChoicesHelper(nameArray, nameIndex + 1, str + nameArray[nameIndex] + ".");
  }
}
public static void buildNameChoices(String nameStr) {
  String[] nameArray = nameStr.split("\\.", -1);
  buildNameChoicesHelper(nameArray, 0, "");
}

如果每个名字都必须是(名字,姓氏)组合,那么您可以尝试以下修改:

public static void buildNameChoicesHelper(String[] nameArray, int nameIndex,
    String firstName, String lastName) {

  if(nameIndex >= nameArray.length) {
    if(lastName.length() > 0) {
      System.out.println(firstName + lastName);
    }
  }
  else {
    buildNameChoicesHelper(nameArray, nameIndex + 1, firstName, lastName);
    buildNameChoicesHelper(nameArray, nameIndex + 1, firstName, lastName + "." + nameArray[nameIndex]);
  }
}
public static void buildNameChoices(String nameStr) {
  String[] nameArray = nameStr.split("\\.", -1);
  for(int i = 0; i < nameArray.length; i++) {
    buildNameChoicesHelper(nameArray, i + 1, nameArray[i], "");
  }
}

关于java - 从字符串数组中获取所有可能的名称组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27024540/

相关文章:

java - Jackson:自定义解析 ObjectId(来自@JsonIdentityInfo)

java - 未注入(inject) Android Dagger 2 依赖项

javascript - 如何从多个数组创建对象数组

c++ - 无限 "true"while 循环

Python循环mysql语句

javascript - 如何使用 angularJs 创建具有连续数字的多维矩阵

java - 泛型类的类型参数化字段在升级到 Java 7 后变得不可见

Java 双输入验证

c++ - 关于编译时 1.constructor 和 2.array 定义的一些疑问

c - 使用字符串读取数字