有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java按长度分割字符串,保持子字符串完整

我把绳子扯断了 “这是对长度超过的字符串的测试” 转换为长度为7(或更短)的子字符串,因此我有一个列表strList,如下所示: [这,是,a,测试,for,thestri,ng,长于]

我需要将其打印成7行,保持子字符串完整: [这是一个测试,用于,thestri,ng,长于]

但是我得到了这个,我找不到错误 [这,这是一个测试,for,thestri,longer,ng-than,seven,charact,ers]

所以我要做的是得到子字符串的长度,并将其与7个字符(L1)的限制进行比较,如果小于L1,则取下一个子字符串并将其添加到同一行(提供它们的长度总和+它们之间的空格仍然是7或更少)。 然后将新字符串添加到列表strList2

package mylessons;
import java.util.*;

public class Level160 {

    public static void main(String[] args) {
         int L1 = 7; // length limit
         int len1 = 0;
         String tmpStr1 = "";
         List<String> strList = new ArrayList<>();
         List<String> strList2 = new ArrayList<>();

         strList.add("this");
         strList.add("is");
         strList.add("a");
         strList.add("test");
         strList.add("for");
         strList.add("thestri");
         strList.add("ng");
         strList.add("longer");
         strList.add("than");
         System.out.println(strList);

         for (int k = 0; k < strList.size(); k++ ) {

                // substring is shorter than L1 - 1 -->> adding to tmpStr1
                if (strList.get(k).length() + len1 < L1 - 1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString() + " ";
                    len1 = (len1 + strList.get(k).length() + 1);
                }

                // substring is L - 1 (whitespace is last char) -->> adding to tmpStr -->> adding to strList2
                if (strList.get(k).length() + len1 == L1 - 1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString();
                    strList2.add(tmpStr1);
                    len1 = 0;
                    tmpStr1 = "";
                }

                // substring is L -->> adding to tmpStr -->> adding to strList2
                if (strList.get(k).length() + len1 == L1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString();
                    strList2.add(tmpStr1);
                    len1 = 0;
                    tmpStr1 = "";
                }

                if (strList.get(k).length() + len1 > L1) {
                    strList2.add(strList.get(k));
                }
            }
            System.out.println(strList2);
    }
}

感谢您的帮助:)


共 (2) 个答案

  1. # 1 楼答案

    好的,我做了一些调整,所以这是一段可以使用的代码:) 此外,我还添加了检查给定字符串中最后一个子字符串是否短于给定的长度限制

    之前的列表: [这,是,a,测试,for,thestri,ng,长于] 在下列各项之后列出: [这是一个测试,用于,thestri,ng,长于]

    public static void main(String[] args) {
         int L1 = 7; // length limit
         int len1 = 0;
         String tmpStr1 = "";
         List<String> strList = new ArrayList<>();
         List<String> strList2 = new ArrayList<>();
    
         strList.add("this");
         strList.add("is");
         strList.add("a");
         strList.add("test");
         strList.add("for");
         strList.add("thestri");
         strList.add("ng");
         strList.add("longer");
         strList.add("than");
         System.out.println(strList);
    
         for (int k = 0; k < strList.size(); k++ ) {
    
                // last substring is shorter than L1
                if (strList.get(k).length() + len1 < L1 - 1 && k == strList.size() - 1) {
                    strList2.add(strList.get(k));
                    continue;
                }
    
                // substring is shorter than L1  >> adding to tmpStr1
                if (strList.get(k).length() + len1 < L1 - 1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString() + " ";
                    len1 = (len1 + strList.get(k).length() + 1);
                    continue;
                }
    
                // substring is L - 1 (whitespace is last char)  >> adding to tmpStr  >> adding to strList2
                if (strList.get(k).length() + len1 == L1 - 1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString();
                    strList2.add(tmpStr1.trim());
                    len1 = 0;
                    tmpStr1 = "";
                }
    
                // substring is L  >> adding to tmpStr  >> adding to strList2
                if (strList.get(k).length() + len1 == L1) {
                    tmpStr1 = tmpStr1 + strList.get(k).toString();
                    strList2.add(tmpStr1.trim());
                    len1 = 0;
                    tmpStr1 = "";
                }
    
                if (strList.get(k).length() + len1 > L1) {
                    strList2.add(tmpStr1.trim());
                    strList2.add(strList.get(k));
                    len1 = 0;
                    tmpStr1 = "";
                }
    
            }
            System.out.println(strList2);
    }
    
  2. # 2 楼答案

    在第一次迭代中,您将遇到第一个if子句和第二个if子句。但是第二个if子句没有清除tmpStr1。这可能不是代码的唯一问题,但在我看来,这暗示了在修复代码时应该尝试做的两件事:

    • 确保每次迭代都会遇到一个if子句
    • 每次向strList2添加内容时,清除tmpStr1和len1