2015-01-20 2 views
2

나는 객체의 (사용자가 제공 한) 이름을 "단축"하는 우아한 방법을 찾고있다. 더 정확하게 :문자열을 "짧게"하기위한 알고리즘은 무엇입니까?

  • 내 사용자가 (일부 개체의 "이름"으로 사용) 무료로 텍스트를 입력 할 수 있습니다, 그들은 (공백, 문장 부호를 포함하여 ...) 64 개 문자 이외에
  • 를 사용할 수 있습니다 그 "긴"이름; 우리는 또한 "축소 된"이름 (정확히 8 문자)을 가지고 있습니다; 일부 레거시 인터페이스에 필요합니다.

이제 64 문자 이름을 기반으로 "축소 된"이름을 생성하는 방법에 대한 의견을 찾고 있습니다.

"우아함"으로 사용자가 단축 문자열 내에서 가치있는 것을 인식 할 수있는 유용한 아이디어가 궁금합니다. 마찬가지로 이름이 "Production Test Item A5"인 경우; 어쩌면 "PTIA5"는 사용자에게 유용하다고 말할 수도 있습니다.

+2

이 8 문자 말보다 훨씬 더 많은 64 문자 단어가있다, 당신은 충돌로 끝날 것 때문에. DOS 방식은 카운터를 자르고 추가하는 것이 었습니다. – Teepeemm

+0

축소 된 이름에 긴 문자와 동일한 문자가 포함될 수 있다면 왜 무작위로 색인을 선택하고 이러한 색인에서 문자를 제거하지 않는가? 당신이 말했듯이 "무료"텍스트라면 왜 우아해야합니까? –

답변

2

긴 버전에 부분 문자열 방법을 적용하고 끝 부분에 공백 문자가있는 경우 트리밍하십시오. 선택적으로 맨 끝의 특수 문자 (예 : 대시)를 제거하고 마지막으로 점을 추가하십시오. 당신의 약어를 그런 식으로 나타내려고합니다. 그냥 빨리 해킹

는 시작하려면 :

String longVersion = "Aswaghtde-5d"; 

    // Get substring 0..8 characters 
    String shortVersion = longVersion.substring(0, (longVersion.length() < 8 ? longVersion.length() : 8)); 

    // Remove whitespace characters from end of String 
    shortVersion = shortVersion.trim(); 

    // Remove any non-characters from end of String 
    shortVersion = shortVersion.replaceAll("[^a-zA-Z0-9\\s]+$", ""); 

    // Add dot to end 
    shortVersion = shortVersion.substring(0, (shortVersion.length() < 8 ? shortVersion.length() : shortVersion.length() - 1)) + "."; 

    System.out.println(shortVersion); 
관련 문제