我有一个很长的描述,当字数大于800时,我想在每次完整停止后打破字符串。
类似于计数800个字符然后识别下一个出现的'。',断开该行寻找下一个800字然后一个句号,然后再次断开该行。
function TrimString($String, $Length){
if(strlen($String)<=$Length){
$stringValue=$String;
} else {
$new_l = strpos ($String , ".", $Length);
$Length = $new_l+1;
$stringValue=substr($String,0,$Length);
}
return $stringValue;
}
我尝试使用此功能但未按预期工作。
$m=800;
echo TrimString(stripslashes($content),$m);
提前感谢您的帮助。
答案 0 :(得分:2)
我理解你的问题如下:
在每800个符号后搜索第一个w = Window().partitionBy("dis_price_released").rowsBetween(-sys.maxsize, sys.maxsize)
df2 = result.withColumn("mean", avg("dis_price_released").over(w))
df2.select("dis_price_released", "mean").show(10)
+------------------+----+
|dis_price_released|mean|
+------------------+----+
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
| 0.0| 0.0|
+------------------+----+
并插入.
。
如果它是正确的,那么你必须像你的方法一样遍历你的字符串
new line
因为我在上面的函数中遇到了一些错误,所以我做了一个新的例子并用这些案例进行了测试。现在function trimString($string, $length){
$str_length = strlen($string);
if ($str_length <= $length){
return $string;
}
$from = 0;
$string_value = '';
// max amount of loops based on the length of $string and $length
$loops = ceil($str_length / $length);
for ($i = 1; $i <= $loops; $i++) {
// $from could be 0 or the length of your last finding dot
$tmp_length = $from + $length;
if ($tmp_length > $str_length) {
break;
}
// get the position of the dot after the calculated length
$pos = strpos($string , ".", $tmp_length);
// append the dot and a br-tag for a new line
$string_value .= substr(substr($string, 0, $pos), $from) . ".<br/>";
// set to the next position after the finding dot
$from = $pos + 1;
}
return $string_value;
}
echo trimString("This is a test. This is not a test. This is a new test.", 5);
的最后一次出现也会被注意到
我希望这会对你有所帮助
$search