2009-10-19 2 views
2

이것은 매우 구체적인 문제이지만, 누구든지 훌륭한 솔루션을 제공 할 수 있을지 궁금합니다. 임의의 크기의 상자에 고정 된 글꼴 크기의 문자열을 넣으려고합니다. 전체 문자열이 맞지 않으면 줄임표 (...)를 자르고 싶습니다. 내 텍스트 인 경우jruby는 줄임표로 길이를 기준으로 문자열을 자릅니다.

그래서 "네덜란드는"그래서, 나는 JRuby를 사용하고

"... 지옥"그 어떤 부분이 뭔가를 찾기 위해 임의의 크기의 내 상자에 맞는 결정 할 java 또는 ruby가 좋습니다. 문자열 맞춤 여부를 확인하기 위해 char-by-char를 트리밍/테스트하는 것 이외의 환상적인 솔루션을 생각해 낼 수 없습니다. 고정 너비 글꼴이 아니기 때문에 각 숯을 같은 너비로 가져갈 수는 없으므로 훨씬 쉬울 것입니다.

올바른 방향으로 나를 가리킬 수있는 생각이나 요령이 있으십니까?

+0

무엇 GUI 프레임 워크를 사용하고 있습니까? – Pesto

+0

문자열의 출력은 무엇입니까? 그것은 다소 큰 차이를 만든다. –

+0

레일 앱입니다.지도의 위치에 대한 라벨로 생성되는 이미지입니다. 이미지는 위치의 크기를 나타내는 원이며 바운딩 박스는 문자열을 넣으려는 것입니다. – brad

답변

2

문자 대 문자로 구성된 루프가 좋습니다. 그러나 수십억을 처리하고 속도를 높여야하는 경우 문자를 반복하는 대신 올바른 길이의 이진 검색을 수행 할 수 있습니다. 다음은 Integer에서 호출 할 수있는 일반적인 binary_search 메소드입니다. < => 비교 블록은 -x 0 또는 + 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})] 
+0

그게 좋은 생각인데, 지금은 수십억 가지가 아니기 때문에 char-by-char를 고수하고 있다고 생각합니다.하지만 성능이 저하되는 것을 발견하면 속도로 놀아 볼 것입니다. 고마워! – brad

0

자바의 FontMetrics 클래스, 특히 stringWidth 메소드를 살펴보십시오.

+0

문자열을 상자 안에 넣는 지 이미 결정했는데 실제로 도움이되지 않습니다. 문자열이 맞지 않으면 알고리즘을 사용하여 문자열을 문자열의 하위 집합으로 트림합니다. 현재 char-by-char 반복 및 stringWidth 테스트. 너무 많은 일처럼 보입니다. – brad

+0

음, 문자로 반복하는 것이 아니라 양분 할 수 있지만 실제로 잘라내는 일종의 일을해야만하는 것처럼 들립니다. 좋은 시작 견적을 원한다면, 모든 것을 고정 너비로 ​​처리하고 (getMaxAdvance를 통해) 어디에서 가져 오는 지 확인하십시오. 또는 getWidths를 사용하고 글꼴에 대한 추가 참조없이 순수한 코드로 계산을 직접 수행하십시오. –

1

대체 접근법은 CSS에서 디스플레이의 잘림을 처리하는 것입니다!

<div style="border: 1px solid gray; width: 200px;"> 
<span style="float: right; color: gray">...</span> 
<div style="width: 184px; overflow: hidden; white-space: nowrap"> 
This is a really long string that goes on and on and on and we need to do something about it eventually but for now it just isn't important so I don't want to think about it. 
</div></div> 

이 사용자의 브라우저 '글꼴 메트릭에 대한 걱정의 감사 할 줄 모르는 작업의 당신을 얻는다 (당신이 모르는, 어느로 자바 서버의 글꼴 메트릭 따라서 알 수없는 관계가 부담).

+0

그것은 공정한 제안이지만 맵에 배치되는 이미지를 생성하므로 역동적 인 것입니다. 서버가 링크 매개 변수를 기반으로 이미지를 반환하기 때문에 이미지에 텍스트가 있어야합니다. – brad

관련 문제