Java 剪切文本以将其放入框中(工具提示)
我正在尝试为我正在执行的程序创建我自己的工具提示,我希望工具提示的文本适合一个框,其中每行的最大字母数是固定的(比如12)Java 剪切文本以将其放入框中(工具提示),java,Java,我正在尝试为我正在执行的程序创建我自己的工具提示,我希望工具提示的文本适合一个框,其中每行的最大字母数是固定的(比如12) 例如,考虑以下字符串: String example = "Hello my name is Martin"; //(23 letters) 现在我想把这个文本放进一个框中 此字符串的正确格式文本如下所示: 第一行:“你好,我的朋友” 第2行:“名称为” 第3行:“马丁” 我真的不知道该怎么解决这个问题。我想到的一件事是在每个“之后拆分输入字符串,如:
例如,考虑以下字符串:
String example = "Hello my name is Martin"; //(23 letters)
现在我想把这个文本放进一个框中
此字符串的正确格式文本如下所示:
第一行:“你好,我的朋友”
第2行:“名称为”
第3行:“马丁”
我真的不知道该怎么解决这个问题。我想到的一件事是在每个“
之后拆分输入字符串,如:
String[] splittedExample = example.split("\\s+");
但是我需要一个算法来检查一行中可以写入多少数组内容,直到达到最大值12为止
我也愿意接受任何其他解决方案
如果有人知道我是怎么做到的,那就太好了。另外,我希望这些行存储在字符串数组中
谢谢您可以创建一个递归函数来拆分和包装指定长度的输入字符串。在下面的代码中,我使用了
\n
作为分隔符,您可以根据需要更改它
以下是代码片段:
public static void main (String[] args)
{
/* Input String */
String input = "Hello my name is Martin";
String result = wrapString(input, 12);
/* String Array */
String[] strArray = result.split("\n");
/* Print Result */
System.out.println(result);
}
/**
* Wrap String Function
* Arguments: String, Wrap Size
**/
private static String wrapString(String input, int size) {
/* Create Char Array */
char[] inpArr = input.toCharArray();
/* Wrap Logic */
if (inpArr.length > size) {
int temp = 0;
for (temp = size; temp > 0 && inpArr[temp] != ' '; temp--);
if (temp > 0) {
/* Left & Right Substrings */
String left = input.substring(0, temp);
String right = input.substring(temp + 1);
/* Return */
return left + "\n" + wrapString(right, size);
}
}
/* Return */
return input;
}
输出:
Hello my
name is
Martin
您可以编写自己的方法来实现这一点:
public static String getLimitedString(String str, int len){
StringBuilder txt = new StringBuilder();
while(str.length() > 0){
if(str.length() < len){
txt.append(str.trim());
str = "";
}
else if(str.charAt(len) == ' '){
txt.append(str.substring(0, len+1).trim() + "\n");
str = str.substring(len+1);
}
else{
txt.append(str.substring(0, str.lastIndexOf(' ', len)).trim() + "\n");
str = str.substring(str.lastIndexOf(' ', len));
}
}
return txt.toString();
}
输出:
System.out.println(getLimitedString("Hello my name is Martin", 12));
Hello my
name is
Martin
你可以在两个单词后拆分,因为你的预期输出每个单词都有两个单词。不,这只是一个示例字符串,如果两个单词加在一起超过12个字母,整个概念将失败。哦,对不起,没有阅读12个字符的限制。如果字符串中有一个单词超过12个字符怎么办?