代码演示采用了 kotlin 初学算法,如有异常欢迎指导,万分感谢!!!
import java.util.regex.Pattern
object MyTest {
@JvmStatic
fun main(arg: Array<String>) {
var t1 = "一二三四五六七八九十壹贰叁肆伍陆柒扒玖拾"
val olderContent = "一二三四五六七八九十";
println("olderContent\t$olderContent\nreplaceAfterContent\t${testLength(olderContent, 5)}")
}
var calculations = 0
var originalName = "";
var lastName = "";
/***
* 测试二分法计算可容纳的个数
* @param name 原内容
* @param confirmLength 允许显示的个数
*/
fun testLength(name: String, confirmLength: Int): String {
if (originalName.equals("")) originalName = name
calculations++
println("第 ${calculations} 次计算")
var nameLength = name.length
var isExceeding = if (nameLength > confirmLength) {
1
} else if (nameLength < confirmLength) {
2
} else {
0
};
var typeName = when (isExceeding) {
1 -> {
"$nameLength 大于 $confirmLength"
}
2 -> {
"$nameLength 小于 $confirmLength"
}
else -> {
"$nameLength 等于 $confirmLength"
}
}
var nameHalf = 0;
var newName = name;
when (isExceeding) {
1 -> { // 大于
nameHalf = nameLength / 2
newName = if (nameHalf > 0) name.substring(0, nameHalf) else name
}
2 -> { // 小于
nameHalf = Math.abs(lastName.length - nameLength) / 2
// var subString = if (lastName.length > nameLength) lastName else originalName
newName = if (nameHalf > 0) originalName.substring(0, nameLength + nameHalf) else name
}
else -> { // 等于
println("完美 perfect name $name newName $newName")
}
}
println("name = $name nameLength $nameLength nameHalf $nameHalf confirmLength = $confirmLength typeName $typeName")
lastName = name
if (newName != name) {
return testLength(newName, confirmLength)
} else {
println("$calculations 次计算就压缩到范围内")
return name
}
}
}