--- /dev/null
+package org.apache.lucene.util;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @lucene.internal
+ */
+public final class English {
+
+ private English() {} // no instance
+
+ public static String longToEnglish(long i) {
+ StringBuilder result = new StringBuilder();
+ longToEnglish(i, result);
+ return result.toString();
+ }
+
+ public static void longToEnglish(long i, StringBuilder result) {
+ if (i == 0) {
+ result.append("zero");
+ return;
+ }
+ if (i < 0) {
+ result.append("minus ");
+ i = -i;
+ }
+ if (i >= 1000000000000000000l) { // quadrillion
+ longToEnglish(i / 1000000000000000000l, result);
+ result.append("quintillion, ");
+ i = i % 1000000000000000000l;
+ }
+ if (i >= 1000000000000000l) { // quadrillion
+ longToEnglish(i / 1000000000000000l, result);
+ result.append("quadrillion, ");
+ i = i % 1000000000000000l;
+ }
+ if (i >= 1000000000000l) { // trillions
+ longToEnglish(i / 1000000000000l, result);
+ result.append("trillion, ");
+ i = i % 1000000000000l;
+ }
+ if (i >= 1000000000) { // billions
+ longToEnglish(i / 1000000000, result);
+ result.append("billion, ");
+ i = i % 1000000000;
+ }
+ if (i >= 1000000) { // millions
+ longToEnglish(i / 1000000, result);
+ result.append("million, ");
+ i = i % 1000000;
+ }
+ if (i >= 1000) { // thousands
+ longToEnglish(i / 1000, result);
+ result.append("thousand, ");
+ i = i % 1000;
+ }
+ if (i >= 100) { // hundreds
+ longToEnglish(i / 100, result);
+ result.append("hundred ");
+ i = i % 100;
+ }
+ //we know we are smaller here so we can cast
+ if (i >= 20) {
+ switch (((int) i) / 10) {
+ case 9:
+ result.append("ninety");
+ break;
+ case 8:
+ result.append("eighty");
+ break;
+ case 7:
+ result.append("seventy");
+ break;
+ case 6:
+ result.append("sixty");
+ break;
+ case 5:
+ result.append("fifty");
+ break;
+ case 4:
+ result.append("forty");
+ break;
+ case 3:
+ result.append("thirty");
+ break;
+ case 2:
+ result.append("twenty");
+ break;
+ }
+ i = i % 10;
+ if (i == 0)
+ result.append(" ");
+ else
+ result.append("-");
+ }
+ switch ((int) i) {
+ case 19:
+ result.append("nineteen ");
+ break;
+ case 18:
+ result.append("eighteen ");
+ break;
+ case 17:
+ result.append("seventeen ");
+ break;
+ case 16:
+ result.append("sixteen ");
+ break;
+ case 15:
+ result.append("fifteen ");
+ break;
+ case 14:
+ result.append("fourteen ");
+ break;
+ case 13:
+ result.append("thirteen ");
+ break;
+ case 12:
+ result.append("twelve ");
+ break;
+ case 11:
+ result.append("eleven ");
+ break;
+ case 10:
+ result.append("ten ");
+ break;
+ case 9:
+ result.append("nine ");
+ break;
+ case 8:
+ result.append("eight ");
+ break;
+ case 7:
+ result.append("seven ");
+ break;
+ case 6:
+ result.append("six ");
+ break;
+ case 5:
+ result.append("five ");
+ break;
+ case 4:
+ result.append("four ");
+ break;
+ case 3:
+ result.append("three ");
+ break;
+ case 2:
+ result.append("two ");
+ break;
+ case 1:
+ result.append("one ");
+ break;
+ case 0:
+ result.append("");
+ break;
+ }
+ }
+
+
+ public static String intToEnglish(int i) {
+ StringBuilder result = new StringBuilder();
+ longToEnglish(i, result);
+ return result.toString();
+ }
+
+ public static void intToEnglish(int i, StringBuilder result) {
+ longToEnglish(i, result);
+ }
+
+ public static void main(String[] args) {
+ System.out.println(longToEnglish(Long.parseLong(args[0])));
+ }
+
+}