gpt4 book ai didi

java - 尝试通过迭代字符串中的每个字符来限制每行的文本输出长度

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:25 24 4
gpt4 key购买 nike

我用 java 编写了这个,但遇到了一些麻烦。

我正在尝试将响应的行长度格式化为定义的限制。目前我的输出是几个空行。响应是从单独的 ArrayList 中读取的。

private void textLimiter()
{
String temp = new String();
String temp2 = new String();

for (int i = 0; i < reply.length(); i++){
if(Character.isWhitespace(reply.charAt(i))){
index2=i;
if((index2 - index3) < limit){
index1 = index2;
}

if ((index2 - index3) >= limit){
temp = reply.substring(index3, index1);
System.out.println(temp);
//resets values for next itteration
index3 = index1;
}

if(i == reply.length()){
temp2 = reply.substring(index3, i);
System.out.println(temp2);
}

}

index3 = 0;
index2 = 0;
index1 = 0;


}
}

任何帮助将不胜感激,谢谢。

编辑:这就是变量的含义:

index1:当 i 为 < limit 时找到的最后一个空白

index2:当前找到的空白

index3:要打印的行的开头(因此在 for 循环的第一个实例中,它等于 0,因为我们从头开始。但是,当它打印第一行时,index3 应该等于 index1 并且重新开始)

temp:当索引2 - 索引3 >= limit 时要打印的行

temp2:当 i < limit 且 ==reply.length() 时要打印的最后一行

编辑2对于这部分代码,我从 HashMap 中读取,回复是直接从 hashmap 中提取的响应。

最佳答案

我会通过以下方式做到这一点:

private List<String> textLimiter(String input, int limit) {
List<String> returnList = new ArrayList<>();
while (input.length() > limit) {
returnList.add(input.substring(0, limit);
input = input.substring(limit, input.length() - limit);
}
returnList.add(input);
}

说明:

  1. 获取输入变量 inputlimit .
  2. 创建 List<String> ,存储输出。
  3. 循环input只要长于 limit .
  4. (循环中)将第一个限制行添加到返回列表中。
  5. (循环中)剪切受 limit 限制的第一个文本。
  6. 将剩余文本添加到输出中。

然后你可以这样调用它:

for (String line : textLimiter("This is a test", 4)) {
System.out.println(line);
}

这将打印以下内容:

This
is
a te
st

如果这不是您的意思,请在您的问题中添加示例输入和输出。

更新:根据新的要求,我会这样做:

private List<String> textLimiter(String input, int limit) {
List<String> returnList = new ArrayList<>();
String[] parts = input.split(" ");
StringBuilder sb = new StringBuilder();
for (String part : parts) {
if (sb.length() + part.length() > limit) {
returnList.add(sb.toString().substring(0, sb.toString().length() - 1));
sb = new StringBuilder();
}
sb.append(part + " ");
}
if (sb.length() > 0) {
returnList.add(sb.toString());
}
return returnList;
}

说明:

  1. 获取输入变量 inputlimit .
  2. 创建 List<String>存储输出。
  3. 拆分input (空白)。
  4. 创建一个空 StringBuilder sb .
  5. 循环 parts 数组.
  6. (循环)如果sb的当前内容+ 新的part将超过limit ,然后添加 sb 的内容减去最后一个 returnList ,并初始化sb .
  7. (循环)始终添加当前的 part + " "sb .
  8. 如果sb仍然有内容,然后将其添加到 returnList还有。

再次调用它,如下所示:

for (String line : textLimiter("If you turn left then you should see the corner at the end of the road.", 20)) {
System.out.println(line);
}

输出:

If you turn left
then you should see
the corner at the
end of the road.

关于java - 尝试通过迭代字符串中的每个字符来限制每行的文本输出长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com