当前位置: 首页 > 知识库问答 >
问题:

在有限大小的字符串数组中拆分字符串

越狐若
2023-03-14

我有一个随机地址字符串,如

字符串s="H. N.-13/1443 laal街附近bharath牙科实验室附近thana qutubsher附近现代面包店saharanpur uttar pradesh 247001";

我想将其拆分为具有两个条件的字符串数组:

  • 该字符串数组的每个元素的长度小于或等于20
  • 字符串数组的元素没有尴尬的结尾

例如,每20个字符拆分将产生:

"H.N.-13/1443 laal st"
"reet near bharath de"
"ntal lab near thana"
"qutubsher near moder"
"n bakery saharanpur"

但正确的输出是:

"H.N.-13/1443 laal"
"street near bharath"
"dental lab near"
"thana qutubsher near"
"modern bakery"
"saharanpur"

注意字符串数组中的每个元素是如何小于或等于20的。

以上是我对这段代码的输出:

static String[] split(String s,int max){
    int total_lines = s.length () / 24;
    if (s.length () % 24 != 0) {
        total_lines++;
    }

    String[] ans = new String[total_lines];
    int count = 0;
    int j = 0;

    for (int i = 0; i < total_lines; i++) {
        for (j = 0; j < 20; j++) {
            if (ans[count] == null) {
                ans[count] = "";
            }

            if (count > 0) {
                if ((20 * count) + j < s.length()) {
                    ans[count] += s.charAt (20 * count + j);
                } else {
                    break;
                }
            } else {
                ans[count] += s.charAt (j);
            }
        }

        String a = "";

        a += ans[count].charAt (0);

        if (a.equals (" ")) {
            ans[i] = ans[i].substring (0, 0) + "" + ans[i].substring (1);
        }

        System.out.println (ans[i]);

        count++;
    }
    return ans;
}

public static void main (String[]args) {
    String add = "H.N.-13/1663 laal street near bharath dental lab near thana qutubsher near modern bakery";
    String city = "saharanpur";
    String state = "uttar pradesh";
    String zip = "247001";
    String s = add + " " + city + " " + state + " " + zip;
    String[]ans = split (s);
}

共有2个答案

常甫
2023-03-14

查找最多20个字符的所有匹配项,以非空格开始,以单词边界结束,并将其收集到列表中:

java prettyprint-override">List<String> parts = Pattern.compile("\\S.{1,19}\\b").matcher(s)
  .results()
  .map(MatchResult::group)
  .collect(Collectors.toList());

观看现场演示。

海翼
2023-03-14

代码不是很清楚,但乍一看,您似乎是在逐字构建,这就是为什么您会得到您看到的输出。相反,若你们想保留一个单词并在必要时将其溢出到下一个数组,你们可以逐字进行。更有希望的代码是:

static String[] split(String s, int max) {
    String[] words = s.split("\s+");
    List<String> out = new ArrayList<>();
        
    int i = 0;
    while (i < words.length) {
        int len = 0;
        StringBuilder sb = new StringBuilder();
        while (i < words.length && len < max) {
            len += words[i].length();
            if (len <= max) {
                sb.append(words[i]+ " ");
                i++;
            }
        }
        out.add(sb.toString().trim());
    }
    return out.toArray(new String[] {});
}

注意:它适用于您的示例输入,但您可能需要调整它,使其适用于包含20个以上字符的长单词等情况。

 类似资料:
  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生

  • 我有类似这样的ab阵列: 和下面这样的字符串: 正如您在该字符串中看到,我有字符存在于运算符数组中,现在我要根据数组中存在的运算符字符拆分字符串。我知道我可以用regex做这件事,但我不知道怎么做

  • 问题内容: 说我在这里有一个字符串: 我想在空白处分割字符串并将值分配给它们各自的变量 此外,有时用户可能没有姓氏。 问题答案: Swift的方法是使用全局函数,如下所示: 与 Swift 2 在Swift 2中,由于引入了内部CharacterView类型,对split的使用变得更加复杂。这意味着String不再采用SequenceType或CollectionType协议,而必须使用该属性来访

  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 问题内容: 文件names.txt由许多名称组成,格式为: 有谁知道如何分割字符串,以便用逗号分隔各个名称? 以下代码按逗号分隔,并在名称两边加上引号,什么是转义字符以分隔出。可以在一个Split语句中完成,拆分并用逗号分隔吗? 顺便说一句,这是Project Euler问题#22的一部分。http://projecteuler.net/problem=22 问题答案: 杰里米(Jeremy)的回