JapanesePhoneNumberFormatter.java revision f013e1afd1e68af5e3b868c26a653bbfb39538f8
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Copyright (C) 2008 The Android Open Source Project 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Licensed under the Apache License, Version 2.0 (the "License"); 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * you may not use this file except in compliance with the License. 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * You may obtain a copy of the License at 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * http://www.apache.org/licenses/LICENSE-2.0 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Unless required by applicable law or agreed to in writing, software 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * distributed under the License is distributed on an "AS IS" BASIS, 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * See the License for the specific language governing permissions and 1407c51d09d4b61891cdc37f44bb332dc286b4de2fBenjamin Kramer * limitations under the License. 15b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton */ 16b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpackage android.telephony; 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonimport android.text.Editable; 20ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Japanese Phone number formatting rule is a bit complicated. 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Here are some valid examples: 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 25e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton * 022-229-1234 0223-23-1234 022-301-9876 015-482-7849 0154-91-3478 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 01547-5-4534 090-1234-1234 080-0123-6789 27861efb3f6e225e45c45511d6da894633b36025a1Caroline Tice * 0800-000-9999 0570-000-000 0276-00-0000 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * As you can see, there is no straight-forward rule here. 30a9385537809ef342c843c5ab972e513742652047Greg Clayton * In order to handle this, a big array is prepared. 317508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham */ 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* package */ class JapanesePhoneNumberFormatter { 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private static short FORMAT_MAP[] = { 346e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice -100, 10, 220, -15, 410, 530, -15, 670, 780, 1060, 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -100, -25, 20, 40, 70, 100, 150, 190, 200, 210, 36a48fe1637ec6a381e500633c087f76662e364c20Sean Callanan -36, -100, -100, -35, -35, -35, 30, -100, -100, -100, 37f18d91c9bbd01152b29d84ab55ad2f0bbc9baf6cSean Callanan -35, -35, -35, -35, -35, -35, -35, -45, -35, -35, 38ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton -100, -100, -100, -35, -35, -35, -35, 50, -35, 60, 391c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton -35, -35, -45, -35, -45, -35, -35, -45, -35, -35, 40cf88b95d435873bd312e716da5701cf3882c5da4Ed Maste -35, -35, -45, -35, -35, -35, -35, -45, -45, -35, 41e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -100, -100, -35, -35, -35, 80, 90, -100, -100, -100, 42e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -35, -35, -35, -35, -35, -45, -45, -35, -35, 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -35, -35, -35, -35, -35, -35, -45, -35, -35, -35, 44613b8739a4d489b7f1c571288d5786768c024205Greg Clayton -25, -25, -35, -35, 110, 120, 130, -35, 140, -25, 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -35, -25, -35, -35, -35, -35, -35, -45, -25, -35, 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -35, -25, -35, -35, -35, -35, -35, -25, -45, -35, 47464c6161464694412b7472129e789248f1cf21b9Greg Clayton -35, -35, -35, -35, -45, -35, -35, -35, -35, -35, 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -35, -35, -35, -35, -35, -35, -45, -45, -35, -35, 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -100, -100, -35, 160, 170, 180, -35, -35, -100, -100, 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner -35, -35, -45, -35, -45, -45, -35, -35, -35, -35, 51c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -35, -35, -35, -35, -35, -35, -35, -45, -35, 52c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -35, -35, -35, -45, -45, -45, -35, -45, -35, 53c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -25, -35, -35, -35, -35, -35, -25, -35, -35, 54c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -25, -35, -35, -35, -35, -35, -35, -25, -25, 55c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -35, -35, -35, -35, -35, -25, -35, -35, -25, 56c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -100, -100, 230, 250, 260, 270, 320, 340, 360, 390, 57c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -25, -25, 240, -35, -35, -35, -25, -35, -35, 5886827fbccc9a4d1f9993d74940f724d63d826e45Jim Ingham -25, -35, -35, -35, -25, -25, -25, -25, -25, -25, 59c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -25, -25, -35, -35, -35, -25, -35, -35, -25, 60c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -35, -35, -35, -35, -25, -35, -35, -35, -25, 61c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -25, -25, -25, -35, 280, 290, 300, 310, -35, 62c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -25, -25, -25, -25, -25, -25, -35, -35, -25, 63c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -35, -35, 6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton -25, -25, -35, -35, -35, -25, -25, -25, -25, -25, 65c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -35, -35, 66c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -35, -25, -35, 330, -35, -35, -35, -35, -35, 676e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice -25, -35, -35, -35, -35, -35, -25, -25, -25, -25, 68c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -25, -25, -25, -35, -25, -35, -35, 350, -35, 69c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -25, -25, 702e7f313dc473b036788319690116b324cb44b765Greg Clayton -35, -25, -35, 370, -35, -35, -25, -35, -35, 380, 712e7f313dc473b036788319690116b324cb44b765Greg Clayton -25, -35, -35, -25, -25, -35, -35, -35, -35, -35, 722e7f313dc473b036788319690116b324cb44b765Greg Clayton -25, -35, -25, -25, -25, -25, -35, -35, -35, -35, 732e7f313dc473b036788319690116b324cb44b765Greg Clayton -25, -35, -25, 400, -35, -35, -35, -35, -25, -35, 742e7f313dc473b036788319690116b324cb44b765Greg Clayton -25, -35, -35, -35, -35, -25, -25, -25, -25, -25, 752e7f313dc473b036788319690116b324cb44b765Greg Clayton -15, -15, 420, 460, -25, -25, 470, 480, 500, 510, 76b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -15, -25, 430, -25, -25, -25, -25, -25, 440, 450, 77b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -25, -35, -35, -35, -35, -35, -35, -35, -35, -35, 78b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -25, -25, -35, -35, -25, -25, -25, -35, -35, -35, 79b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -15, -25, -15, -15, -15, -15, -15, -25, -25, -15, 80b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -25, -25, -25, -25, -25, -25, -35, -25, -35, -35, 81b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -35, -25, -25, -35, -25, -35, -35, -35, -25, -25, 82b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham 490, -15, -25, -25, -25, -35, -35, -25, -35, -35, 83b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -15, -35, -35, -35, -35, -35, -35, -35, -35, -15, 84b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -35, -25, -25, -25, -25, -25, -25, -25, -25, -25, 85b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -25, -25, -25, -35, -35, -35, -25, -25, -25, 520, 86b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -100, -100, -45, -100, -45, -100, -45, -100, -45, -100, 87b794020ffbd6473c59a6e98be044df50abf7fc30Jim Ingham -25, -100, -25, 540, 580, 590, 600, 610, 630, 640, 88090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -25, -35, -35, -35, -25, -25, -35, -35, -35, 550, 89090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -35, -35, -25, -25, -25, -25, 560, 570, -25, -35, 90090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -35, -35, -35, -35, -25, -25, -25, -25, -25, -25, 91090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -25, -25, -25, -25, -35, -25, -25, -35, -25, -25, 92090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -25, -25, -25, -25, -35, -35, -25, -35, -35, -25, 93090f83176695d86197b0e86b67dee4160ec5003dJim Ingham -35, -35, -25, -35, -35, -35, -35, -35, -35, -25, 94761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -100, -35, -35, -35, -35, -35, -35, -35, -35, -35, 95761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -36, -100, -35, -35, -35, -35, 620, -35, -35, -100, 96761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -35, -35, -35, -35, -35, -35, -35, -35, -35, -45, 97761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -25, -35, -25, -25, -35, -35, -35, -35, -25, -25, 98761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -25, -25, -25, -25, -35, -35, -35, 650, -35, 660, 99761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham -35, -35, -35, -35, -45, -35, -35, -35, -35, -45, 100c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -35, -35, -35, -35, -35, -35, -35, -35, -35, -25, 101c6e82e4a323d7a7168b05365c53c9bc2e0d418e3Greg Clayton -26, -100, 680, 690, 700, -25, 720, 730, -25, 740, 102102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton -25, -35, -25, -25, -25, -35, -25, -25, -25, -25, 1036e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice -25, -25, -25, -25, -25, -35, -35, -35, -35, -35, 104b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -100, -35, -35, -35, -35, 710, -35, -35, -35, 105b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -35, -35, -35, -35, -35, -35, -45, -35, 106b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -25, -35, -25, -35, -25, -35, -35, -35, -35, -25, 107b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -35, -35, -35, -25, -35, -25, -35, -35, 108b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -25, -25, 750, 760, 770, -35, -35, -35, 109b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -25, -35, -25, -25, -25, -25, -35, -35, -35, -25, 110b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -25, -35, -35, -35, -35, -25, -25, -35, -35, -25, 111b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -25, -35, -35, -35, -35, -35, -25, -25, -35, -35, 112e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 790, -100, 800, 850, 900, 920, 940, 1030, 1040, 1050, 113e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -36, -26, -26, -26, -26, -26, -26, -26, -26, -26, 114e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -25, -25, -35, 810, -25, -35, -35, -25, 820, 115e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -35, -25, -25, -35, -35, -35, -35, -35, -25, 116ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton -25, -35, 830, -35, 840, -35, -25, -35, -35, -25, 117b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -25, -25, -25, -25, -25, -25, -25, -25, -25, 118b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -100, -25, -25, -25, -100, -100, -100, -100, -100, -100, 119444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -25, -25, -35, -35, -35, -35, 860, -35, 870, 880, 120444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -35, -35, 121e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -35, -35, -35, -35, -35, -35, -45, -45, -35, 122b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -100, -100, -100, -100, -100, -100, 890, -100, -100, -100, 123e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -45, -45, -25, -45, -45, -25, -45, -45, -45, 124e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -25, -25, -25, -25, -35, -35, 910, -35, -25, 125b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -35, -35, -35, -35, -35, -45, -35, -35, 126e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -100, 930, -35, -35, -35, -35, -35, -35, -35, -35, 127e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -100, -100, -45, -100, -45, -100, -100, -100, -100, -100, 128e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -25, -25, 950, -25, 970, 990, -35, 1000, 1010, 129b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -35, -35, -35, -35, 960, -35, -35, -35, 130b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -45, -45, -45, -45, -45, -45, -35, -45, -45, -45, 131b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -25, -35, -35, 980, -35, -35, -35, -35, 132444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -100, -100, -25, -25, -100, -100, -100, -100, -100, -100, 133444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -35, -35, 134e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -35, -35, -35, -35, -35, -35, -35, -35, -25, 135b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -25, -35, -35, -35, -25, -25, -35, -35, -35, 1020, 136e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -45, -45, -35, -35, -45, -45, -45, -45, -45, -45, 137e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -25, -25, -25, -25, -35, -25, -35, -25, -35, 138e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -25, -25, -35, -35, -35, -25, -35, -25, -35, 139e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -25, -35, -35, -35, -35, -35, -35, -35, -25, 140e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -26, -100, 1070, 1080, 1090, 1110, 1120, 1130, 1140, 1160, 141e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -25, -25, -25, -25, -25, -25, -25, -25, -25, 142ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton -35, -25, -25, -25, -25, -25, -25, -25, -25, -25, 143b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -100, -35, -35, -35, -100, -35, -35, -35, 1100, 144b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton -35, -35, -35, -35, -35, -35, -45, -35, -35, -35, 145444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -35, -25, -35, -25, -35, -35, -35, -35, -25, -35, 146444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton -25, -25, -25, -25, -35, -35, -35, -35, -35, -35, 147e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -25, -35, -35, -35, -25, -25, -35, -35, -35, 148e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 1150, -25, -35, -35, -35, -35, -35, -35, -25, -25, 149e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -35, -45, -35, -35, -35, -35, -35, -35, -35, 150e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, 1170, -25, -35, 1180, -35, 1190, -35, -25, -25, 151e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -100, -100, -45, -45, -100, -100, -100, -100, -100, -100, 152e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -25, -35, -35, -35, -35, -35, -35, -25, -25, -35, 153e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton -35, -35, -35, -35, -35, -35, -35, -35, -35, -45}; 154ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 155e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton public static void format(Editable text) { 156b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // Here, "root" means the position of "'": 157e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton // 0'3, 0'90, and +81'-90 158e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton // (dash will be deleted soon, so it is actually +81'90). 159e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton int rootIndex = 1; 160ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton int length = text.length(); 161e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton if (length > 3 162e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton && text.subSequence(0, 3).toString().equals("+81")) { 163ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton rootIndex = 3; 164ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } else if (length < 1 || text.charAt(0) != '0') { 165ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return; 166ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 167e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton 16836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton CharSequence saved = text.subSequence(0, length); 16936bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 17036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton // Strip the dashes first, as we're going to add them back 17136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton int i = 0; 17236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton while (i < text.length()) { 17336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (text.charAt(i) == '-') { 17436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton text.delete(i, i + 1); 17536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } else { 17636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton i++; 17736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 17836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton } 179c86723f0a71f5d929f4543c544d9255da52ea49dHan Ming Ong 18036bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton length = text.length(); 18136bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton int dashposition; 18236bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton 18336bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton i = rootIndex; 18436bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton int base = 0; 18536bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton while (i < length) { 18636bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton char ch = text.charAt(i); 18736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton if (!Character.isDigit(ch)) { 188ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton text.replace(0, length, saved); 189ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return; 19024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 191ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton short value = FORMAT_MAP[base + ch - '0']; 19224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (value < 0) { 19324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (value <= -100) { 194a733c04608cc94592a15d27583529588e19db552Greg Clayton text.replace(0, length, saved); 195b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return; 196a733c04608cc94592a15d27583529588e19db552Greg Clayton } 197b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int dashPos2 = rootIndex + (Math.abs(value) % 10); 198a733c04608cc94592a15d27583529588e19db552Greg Clayton if (length > dashPos2) { 199b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton text.insert(dashPos2, "-"); 200a733c04608cc94592a15d27583529588e19db552Greg Clayton } 201b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton int dashPos1 = rootIndex + (Math.abs(value) / 10); 202a733c04608cc94592a15d27583529588e19db552Greg Clayton if (length > dashPos1) { 203b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton text.insert(dashPos1, "-"); 204a733c04608cc94592a15d27583529588e19db552Greg Clayton } 20524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 20624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } else { 207b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton base = value; 20824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton i++; 209b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 21024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 21124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 21224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (length > 3 && rootIndex == 3) { 213b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton text.insert(rootIndex, "-"); 21424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 215b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 21624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}