首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串拆分为索引值(而不是单词的中间)

将字符串拆分为索引值(而不是单词的中间)
EN

Stack Overflow用户
提问于 2022-01-26 21:07:06
回答 2查看 133关注 0票数 -1

下面是一个例子

String str = 'Java是一种高级编程语言,最初由Sun Microsystems开发,1995年发布。

尝试根据定义的索引值来拆分字符串,但如果该索引位于单词的中间,则在单词后面将其拆分。

因此,如果索引是31,那么这个句子实际上会像这样分开(每行有31个字符长的)

代码语言:javascript
复制
Java is a high-level programmin
g language originally developed 
by Sun Microsystems and release
d in 1995

注意“编程”和“发布”两个词是如何分开的。如果索引处的字符不是空格,我想将其移到下一个空格,然后拆分字符串。例如:

代码语言:javascript
复制
Java is a high-level programming
language originally developed by
Sun Microsystems and released in
1995

在上面的插图中,没有一个单词被分割(每行至少有31个字符长)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-26 21:51:37

这里有一条路。不涉及明显的循环。

  • 找到字符串的中点。
  • 在中点之后找到第一个空格。
  • 在中点之前找到第一个空格。
  • 根据中点的距离选择拆分位置。

代码语言:javascript
复制
int mid = str.length()/2;
int indexBeyondMid = str.indexOf(' ',mid);
int indexBeforeMid = str.substring(0,mid).lastIndexOf(' ');
int splitPoint = mid - indexBeforeMid < indexBeyondMid - mid 
         ? indexBeforeMid 
         : indexBeyondMid;
String firstHalf = str.substring(0,splitPoint);
String secondHalf = str.substring(splitPoint+1); // ignores leading space.
System.out.println(firstHalf);
System.out.println(secondHalf);

上述各点将尽可能均匀地分配。如果您想在中间点之后的第一个空间上拆分,那么只需要在indexBeyondMid上拆分,然后忘记剩下的部分。

如果您希望尽可能地将一行拆分为指定的线宽,您可以这样做。

代码语言:javascript
复制
int lineWidth = 19;
while (!str.isBlank()) {
    lineWidth = lineWidth > str.length() ? str.length() : lineWidth;
    int indexBeyondMid = str.indexOf(' ',lineWidth);
    int indexBeforeMid = str.substring(0,lineWidth).lastIndexOf(' ');
    int splitPoint = lineWidth - indexBeforeMid < indexBeyondMid - lineWidth 
             ? indexBeforeMid 
             : indexBeyondMid;
    if (splitPoint < 0) {
        System.out.println(str);
        break;
    }
    System.out.println(str.substring(0, splitPoint));
    str = str.substring(splitPoint+1);
}

版画

代码语言:javascript
复制
Hey I am string that
will be split but
remember i will not
be cut in the middle
of the word
票数 0
EN

Stack Overflow用户

发布于 2022-01-26 21:23:41

这是一个简单的解决方案:

代码语言:javascript
复制
import java.util.*;

public class Main
{

  public static String[] splitBy(String text, int index)
  {
    int charIn = 0;
    String[] defaultArray = new String[2];

    for(charIn = index; charIn < text.length(); charIn++)
    {
      if(text.charAt(charIn) == ' ')
      {
        defaultArray[0] = text.substring(0, charIn);
        defaultArray[1] = text.substring(charIn, text.length() - 1);

        return defaultArray;
      }
    }

    return defaultArray;
  }
  public static void main(String[] args)
  {
    String text = "This is a nice text"; // Your text
    int index = 10; // Index to split

    System.out.println(splitBy(text, index)[0]); // Print first part of the splitted
    System.out.println(splitBy(text, index)[1]); // Print part 2
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70870257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档