有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于带省略号长度的java jruby修剪字符串

这是一个相当具体的问题,但我想知道是否有人会有一个绝妙的解决方案。我试图将一个固定字体大小的字符串放入一个任意大小的框中,这样,如果整个字符串不合适,我想修剪它并添加一个省略号(…)

所以,如果我的文本是“荷兰”,我想确定它的哪一部分适合我的任意大小的盒子,看起来像“荷兰……”

我使用的是jruby,所以java或ruby也可以。除了一个字符一个字符地修剪/测试字符串是否合适之外,我想不出一个好办法。因为它不是固定宽度的字体,所以我不能把每个字符都当作相同的宽度,这会让这更容易

有什么想法或建议可以给我指明正确的方向吗


共 (1) 个答案

  1. # 1 楼答案

    逐字符循环可能很好。但是,如果你正在做数十亿个字符,并且需要加快它们的速度,你可以通过二进制搜索来找到正确的长度,而不是仅仅遍历字符。这里有一个通用的二进制搜索方法,你可以调用一个整数。给它一个<=>;返回-x0或+x的比较块,每次迭代跳转一半,直到测试返回0或跳转大小变小

    class Integer
      def binary_search
        current = self
        nextjump = current / 2.0
        until (test = yield(current)) == 0 || nextjump < 0.5
          if test < 0
        current += nextjump
          else
            current -= nextjump
          end
          nextjump /= 2.0
        end
        current
      end
    end
    

    然后像这样使用:

    goal = whatever
    a[0...(a.size.binary_search {|i| a[0...i].stringWidth - goal})]