×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: Ellirabeth Dzhurko
Added: Nov 22, 2017 7:38 AM
Views: 4
Tags: no tags
Вы можете анализировать четыре вида границ при помощи класса BreakIterator: символов, слов, предложений и разрывов строк. При создании экземпляра BreakIterator вы вызываете соответствующий метод фабрики:

getCharacterInstance
getWordInstance
getSentenceInstance
getLineInstance
Каждый экземпляр BreakIterator может обнаруживать только один тип границ. Если вы хотите определять и границы символов, и границы слов, например, вы создаете два отдельных экземпляра.
  1. package de.justiz.fxeditor.controller;
  2.  
  3. import java.text.BreakIterator;
  4. import java.util.Locale;
  5.  
  6. /**
  7.  * Created by dzhurko on 21.11.2017.
  8.  */
  9. public class TestBreakOperator {
  10.     static void extractWords(String target, BreakIterator wordIterator) {
  11.  
  12.         wordIterator.setText(target);
  13.         int start = wordIterator.first();
  14.         int end = wordIterator.next();
  15.  
  16.         while (end != BreakIterator.DONE) {
  17.             String word = target.substring(start, end);
  18.             if (Character.isLetterOrDigit(word.charAt(0))) {
  19.                 System.out.println(word);
  20.             }
  21.             start = end;
  22.             end = wordIterator.next();
  23.         }
  24.     }
  25.  
  26.     static void reverseWords(String target, BreakIterator wordIterator) {
  27.  
  28.         wordIterator.setText(target);
  29.         int end = wordIterator.last();
  30.         int start = wordIterator.previous();
  31.  
  32.         while (start != BreakIterator.DONE) {
  33.             String word = target.substring(start, end);
  34.             if (Character.isLetterOrDigit(word.charAt(0)))
  35.                 System.out.println(word);
  36.             end = start;
  37.             start = wordIterator.previous();
  38.         }
  39.     }
  40.  
  41.     static void markBoundaries(String target, BreakIterator iterator) {
  42.  
  43.         StringBuffer markers = new StringBuffer();
  44.         markers.setLength(target.length() + 1);
  45.         for (int k = 0; k < markers.length(); k++) {
  46.             markers.setCharAt(k, ' ');
  47.         }
  48.  
  49.         iterator.setText(target);
  50.         int boundary = iterator.first();
  51.  
  52.         while (boundary != BreakIterator.DONE) {
  53.             markers.setCharAt(boundary, '^');
  54.             boundary = iterator.next();
  55.         }
  56.  
  57.         System.out.println(target);
  58.         System.out.println(markers);
  59.     }
  60.  
  61.     static void formatLines(String target, int maxLength, Locale currentLocale) {
  62.  
  63.         BreakIterator boundary = BreakIterator.getLineInstance(currentLocale);
  64.         boundary.setText(target);
  65.         int start = boundary.first();
  66.         int end = boundary.next();
  67.         int lineLength = 0;
  68.  
  69.         while (end != BreakIterator.DONE) {
  70.             String word = target.substring(start, end);
  71.             lineLength = lineLength + word.length();
  72.             if (lineLength >= maxLength) {
  73.                 System.out.println();
  74.                 lineLength = word.length();
  75.             }
  76.             System.out.print(word);
  77.             start = end;
  78.             end = boundary.next();
  79.         }
  80.     }
  81.  
  82.     static void listPositions(String target, BreakIterator iterator) {
  83.  
  84.         iterator.setText(target);
  85.         int boundary = iterator.first();
  86.  
  87.         while (boundary != BreakIterator.DONE) {
  88.             System.out.println(boundary);
  89.             boundary = iterator.next();
  90.         }
  91.     }
  92.  
  93.     static void characterExamples() {
  94.  
  95.         BreakIterator arCharIterator = BreakIterator
  96.                 .getCharacterInstance(new Locale("ar", "SA"));
  97.         // Arabic word for "house"
  98.         String house = "\u0628" + "\u064e" + "\u064a" + "\u0652" + "\u067a"
  99.                 + "\u064f";
  100.         listPositions(house, arCharIterator);
  101.     }
  102.  
  103.     static void wordExamples() {
  104.  
  105.         Locale currentLocale = new Locale("en", "US");
  106.         BreakIterator wordIterator = BreakIterator.getWordInstance(currentLocale);
  107.         String someText = "She stopped.  "
  108.                 + "She said, \"Hello there3,\" and then went on.";
  109.         markBoundaries(someText, wordIterator);
  110.         System.out.println();
  111.         extractWords(someText, wordIterator);
  112.     }
  113.  
  114.     static void sentenceExamples() {
  115.  
  116.         Locale currentLocale = new Locale("en", "US");
  117.         BreakIterator sentenceIterator = BreakIterator
  118.                 .getSentenceInstance(currentLocale);
  119.         String someText = "She stopped.  "
  120.                 + "She said, \"Hello there2,\" and then went on.";
  121.         markBoundaries(someText, sentenceIterator);
  122.         String variousText = "He's vanished!  "
  123.                 + "What will we do?  It's up to us.";
  124.         markBoundaries(variousText, sentenceIterator);
  125.         String decimalText = "Please add 1.5 liters to the tank.";
  126.         markBoundaries(decimalText, sentenceIterator);
  127.         String donneText = "\"No man is an island . . . " + "every man . . . \"";
  128.         markBoundaries(donneText, sentenceIterator);
  129.         String dogText = "My friend, Mr. Jones, has a new dog.  "
  130.                 + "The dog's name is Spot.";
  131.         markBoundaries(dogText, sentenceIterator);
  132.     }
  133.  
  134.     static void lineExamples() {
  135.  
  136.         Locale currentLocale = new Locale("en", "US");
  137.         BreakIterator lineIterator = BreakIterator.getLineInstance(currentLocale);
  138.         String someText = "She stopped.  "
  139.                 + "She said, \"Hello there,\" and then went on.";
  140.         markBoundaries(someText, lineIterator);
  141.         String hardHyphen = "There are twenty-four hours in a day.";
  142.         markBoundaries(hardHyphen, lineIterator);
  143.         System.out.println();
  144.         String moreText = "She said, \"Hello there,\" and then "
  145.                 + "went on down the street.  When she stopped "
  146.                 + "to look at the fur coats in a shop window, "
  147.                 + "her dog growled.  \"Sorry Jake,\" she said. "
  148.                 + " \"I didn't know you would take it personally.\"";
  149.         formatLines(moreText, 30, currentLocale);
  150.         System.out.println();
  151.     }
  152.  
  153.     static public void main(String[] args) {
  154.  
  155.         System.out.println("characterExamples();");
  156.         characterExamples();
  157.         System.out.println();
  158.         System.out.println("wordExamples();");
  159.         wordExamples();
  160.         System.out.println();
  161.         System.out.println("sentenceExamples();");
  162.         sentenceExamples();
  163.         System.out.println();
  164.         System.out.println("lineExamples();");
  165.         lineExamples();
  166.     }
  167.  
  168. }
  169.