Mik*_*ike 2 java string replace
我必须读取一个整数,它将是后续行的长度.(文本行永远不会超过提供的长度).
然后我必须阅读每行文本并尽可能均匀地将空格转换为下划线.例如:
我会输入30行的长度.然后是一行文字Hello this is a test string.然后将所有空格转换为下划线并填充,以便文本填充给定的行长度,如下所示:Hello__this__is__a_test_string.正如您所看到的,原始文本的长度为27个字符,因此要将其填充为30个字符,我必须在原始文本中添加3个额外的空格,然后将这些空格转换为下划线字符.
请你告诉我一个可以解决这个问题的方法吗?
我所做的是将句子分成单词.然后计算出需要添加多少空格.然后迭代单词并为每个单词添加一个空格,直到用完要添加的空格.如果你有足够的空格,你需要在单词中添加多个单词(就像你有5个单词,但需要添加13个空格),只需将剩余的空格数除以单词数,然后将该数加到每个单词中.先说.然后你可以取余数并迭代添加空格的单词,直到你完成为止.另外,请确保只向句子中的最后一个单词添加空格.
我最近不得不在 Java 中做类似的事情。代码本身相对简单。我发现花费的时间最长的是让我的头脑围绕着正当化过程。
我开始一步一步地说明如何手动调整文本。
这样做使我对算法的编码变得更加简单!
你说你已经阅读了行长和行上的文本,所以 1 和 2 你已经完成了。2 是一个简单的string.length()调用。
计算添加到字符串以等于行长度所需的空格数只是取行长度并减去字符串的长度。
lineLength - string.length() = noofspacestoadd;
Run Code Online (Sandbox Code Playgroud)
可能有不止一种方法可以做到这一点。我发现这样做的最简单方法是将字符串转换为 char[],然后遍历字符检查 ' ' 并设置它何时找到 ' ' 的计数
这是一个简单的除法计算!
noofgaps / noofspacestoadd = noofspacestoaddtoeachgap;
Run Code Online (Sandbox Code Playgroud)
注意:您必须确保使用整数进行除法!由于 5 / 2 = 2.5,因此您知道必须为单词之间的每个间隙添加 2 个空格,并且使用 int 的除法会截断十进制数以形成整数。
在能够将需要添加到每个间隙的字符串数量相加之前,您需要将此数字转换为一串空格。因此,您需要编写一种方法,将给定的整数转换为与该给定数字相等的空格字符串。同样,这可以通过不同的方式完成。我这样做的方式是这样的
String s = "";
for(int i=noofspacestoaddtoeachgap; i>0; i--)
{
s+= " ";
}
return s;
Run Code Online (Sandbox Code Playgroud)
我这样做的方法是将字符串转换为子字符串数组,子字符串是数组中的每个单词。如果您在 javadoc 中查找 String 类,您应该会在 String 类中找到可用于实现此目的的方法!
当您拥有子字符串数组时,您可以将空格字符串添加到每个子字符串的末尾以形成新的子字符串!
这又是一个简单的计算。使用 % 运算符,您可以执行类似于我们之前所做的除法的余数除法。
noofgaps % noofspacestoadd = noofspacestoaddtoeachgap;
Run Code Online (Sandbox Code Playgroud)
此计算的结果为我们提供了对齐文本所需的额外空格数。
这可能是算法中最困难的部分,因为您必须找出一种方法来遍历单词之间的每个间隙并添加一个额外的空格,直到没有多余的空格可以添加为止!
return String;
Run Code Online (Sandbox Code Playgroud)