Convert.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850
  1. package com.poyee.util;
  2. import org.springframework.util.StringUtils;
  3. import java.math.BigDecimal;
  4. import java.math.BigInteger;
  5. import java.nio.ByteBuffer;
  6. import java.nio.charset.Charset;
  7. import java.text.NumberFormat;
  8. import java.util.Set;
  9. /**
  10. * 类型转换器
  11. *
  12. * @author lsz
  13. */
  14. public class Convert {
  15. /**
  16. * 转换为字符串<br>
  17. * 如果给定的值为null,或者转换失败,返回默认值<br>
  18. * 转换失败不会报错
  19. *
  20. * @param value 被转换的值
  21. * @param defaultValue 转换错误时的默认值
  22. * @return 结果
  23. */
  24. public static String toStr(Object value, String defaultValue) {
  25. if (null == value) {
  26. return defaultValue;
  27. }
  28. if (value instanceof String) {
  29. return (String) value;
  30. }
  31. return value.toString();
  32. }
  33. /**
  34. * 转换为字符串<br>
  35. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  36. * 转换失败不会报错
  37. *
  38. * @param value 被转换的值
  39. * @return 结果
  40. */
  41. public static String toStr(Object value) {
  42. return toStr(value, null);
  43. }
  44. /**
  45. * 转换为字符<br>
  46. * 如果给定的值为null,或者转换失败,返回默认值<br>
  47. * 转换失败不会报错
  48. *
  49. * @param value 被转换的值
  50. * @param defaultValue 转换错误时的默认值
  51. * @return 结果
  52. */
  53. public static Character toChar(Object value, Character defaultValue) {
  54. if (null == value) {
  55. return defaultValue;
  56. }
  57. if (value instanceof Character) {
  58. return (Character) value;
  59. }
  60. final String valueStr = toStr(value, null);
  61. return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
  62. }
  63. /**
  64. * 转换为字符<br>
  65. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  66. * 转换失败不会报错
  67. *
  68. * @param value 被转换的值
  69. * @return 结果
  70. */
  71. public static Character toChar(Object value) {
  72. return toChar(value, null);
  73. }
  74. /**
  75. * 转换为byte<br>
  76. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
  77. * 转换失败不会报错
  78. *
  79. * @param value 被转换的值
  80. * @param defaultValue 转换错误时的默认值
  81. * @return 结果
  82. */
  83. public static Byte toByte(Object value, Byte defaultValue) {
  84. if (value == null) {
  85. return defaultValue;
  86. }
  87. if (value instanceof Byte) {
  88. return (Byte) value;
  89. }
  90. if (value instanceof Number) {
  91. return ((Number) value).byteValue();
  92. }
  93. final String valueStr = toStr(value, null);
  94. if (StringUtils.isEmpty(valueStr)) {
  95. return defaultValue;
  96. }
  97. try {
  98. return Byte.parseByte(valueStr);
  99. } catch (Exception e) {
  100. return defaultValue;
  101. }
  102. }
  103. /**
  104. * 转换为byte<br>
  105. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  106. * 转换失败不会报错
  107. *
  108. * @param value 被转换的值
  109. * @return 结果
  110. */
  111. public static Byte toByte(Object value) {
  112. return toByte(value, null);
  113. }
  114. /**
  115. * 转换为Short<br>
  116. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
  117. * 转换失败不会报错
  118. *
  119. * @param value 被转换的值
  120. * @param defaultValue 转换错误时的默认值
  121. * @return 结果
  122. */
  123. public static Short toShort(Object value, Short defaultValue) {
  124. if (value == null) {
  125. return defaultValue;
  126. }
  127. if (value instanceof Short) {
  128. return (Short) value;
  129. }
  130. if (value instanceof Number) {
  131. return ((Number) value).shortValue();
  132. }
  133. final String valueStr = toStr(value, null);
  134. if (StringUtils.isEmpty(valueStr)) {
  135. return defaultValue;
  136. }
  137. try {
  138. return Short.parseShort(valueStr.trim());
  139. } catch (Exception e) {
  140. return defaultValue;
  141. }
  142. }
  143. /**
  144. * 转换为Short<br>
  145. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  146. * 转换失败不会报错
  147. *
  148. * @param value 被转换的值
  149. * @return 结果
  150. */
  151. public static Short toShort(Object value) {
  152. return toShort(value, null);
  153. }
  154. /**
  155. * 转换为Number<br>
  156. * 如果给定的值为空,或者转换失败,返回默认值<br>
  157. * 转换失败不会报错
  158. *
  159. * @param value 被转换的值
  160. * @param defaultValue 转换错误时的默认值
  161. * @return 结果
  162. */
  163. public static Number toNumber(Object value, Number defaultValue) {
  164. if (value == null) {
  165. return defaultValue;
  166. }
  167. if (value instanceof Number) {
  168. return (Number) value;
  169. }
  170. final String valueStr = toStr(value, null);
  171. if (StringUtils.isEmpty(valueStr)) {
  172. return defaultValue;
  173. }
  174. try {
  175. return NumberFormat.getInstance().parse(valueStr);
  176. } catch (Exception e) {
  177. return defaultValue;
  178. }
  179. }
  180. /**
  181. * 转换为Number<br>
  182. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  183. * 转换失败不会报错
  184. *
  185. * @param value 被转换的值
  186. * @return 结果
  187. */
  188. public static Number toNumber(Object value) {
  189. return toNumber(value, null);
  190. }
  191. /**
  192. * 转换为int<br>
  193. * 如果给定的值为空,或者转换失败,返回默认值<br>
  194. * 转换失败不会报错
  195. *
  196. * @param value 被转换的值
  197. * @param defaultValue 转换错误时的默认值
  198. * @return 结果
  199. */
  200. public static Integer toInt(Object value, Integer defaultValue) {
  201. if (value == null) {
  202. return defaultValue;
  203. }
  204. if (value instanceof Integer) {
  205. return (Integer) value;
  206. }
  207. if (value instanceof Number) {
  208. return ((Number) value).intValue();
  209. }
  210. final String valueStr = toStr(value, null);
  211. if (StringUtils.isEmpty(valueStr)) {
  212. return defaultValue;
  213. }
  214. try {
  215. return Integer.parseInt(valueStr.trim());
  216. } catch (Exception e) {
  217. return defaultValue;
  218. }
  219. }
  220. /**
  221. * 转换为int<br>
  222. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  223. * 转换失败不会报错
  224. *
  225. * @param value 被转换的值
  226. * @return 结果
  227. */
  228. public static Integer toInt(Object value) {
  229. return toInt(value, null);
  230. }
  231. /**
  232. * 转换为Integer数组<br>
  233. *
  234. * @param str 被转换的值
  235. * @return 结果
  236. */
  237. public static Integer[] toIntArray(String str) {
  238. return toIntArray(",", str);
  239. }
  240. /**
  241. * 转换为Long数组<br>
  242. *
  243. * @param str 被转换的值
  244. * @return 结果
  245. */
  246. public static Long[] toLongArray(String str) {
  247. return toLongArray(",", str);
  248. }
  249. /**
  250. * 转换为Integer数组<br>
  251. *
  252. * @param split 分隔符
  253. * @param split 被转换的值
  254. * @return 结果
  255. */
  256. public static Integer[] toIntArray(String split, String str) {
  257. if (StringUtils.isEmpty(str)) {
  258. return new Integer[]{};
  259. }
  260. String[] arr = str.split(split);
  261. final Integer[] ints = new Integer[arr.length];
  262. for (int i = 0; i < arr.length; i++) {
  263. final Integer v = toInt(arr[i], 0);
  264. ints[i] = v;
  265. }
  266. return ints;
  267. }
  268. /**
  269. * 转换为Long数组<br>
  270. *
  271. * @param split 分隔符
  272. * @param str 被转换的值
  273. * @return 结果
  274. */
  275. public static Long[] toLongArray(String split, String str) {
  276. if (StringUtils.isEmpty(str)) {
  277. return new Long[]{};
  278. }
  279. String[] arr = str.split(split);
  280. final Long[] longs = new Long[arr.length];
  281. for (int i = 0; i < arr.length; i++) {
  282. final Long v = toLong(arr[i], null);
  283. longs[i] = v;
  284. }
  285. return longs;
  286. }
  287. /**
  288. * 转换为String数组<br>
  289. *
  290. * @param str 被转换的值
  291. * @return 结果
  292. */
  293. public static String[] toStrArray(String str) {
  294. return toStrArray(",", str);
  295. }
  296. /**
  297. * 转换为String数组<br>
  298. *
  299. * @param split 分隔符
  300. * @param split 被转换的值
  301. * @return 结果
  302. */
  303. public static String[] toStrArray(String split, String str) {
  304. return str.split(split);
  305. }
  306. /**
  307. * 转换为long<br>
  308. * 如果给定的值为空,或者转换失败,返回默认值<br>
  309. * 转换失败不会报错
  310. *
  311. * @param value 被转换的值
  312. * @param defaultValue 转换错误时的默认值
  313. * @return 结果
  314. */
  315. public static Long toLong(Object value, Long defaultValue) {
  316. if (value == null) {
  317. return defaultValue;
  318. }
  319. if (value instanceof Long) {
  320. return (Long) value;
  321. }
  322. if (value instanceof Number) {
  323. return ((Number) value).longValue();
  324. }
  325. final String valueStr = toStr(value, null);
  326. if (StringUtils.isEmpty(valueStr)) {
  327. return defaultValue;
  328. }
  329. try {
  330. // 支持科学计数法
  331. return new BigDecimal(valueStr.trim()).longValue();
  332. } catch (Exception e) {
  333. return defaultValue;
  334. }
  335. }
  336. /**
  337. * 转换为long<br>
  338. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  339. * 转换失败不会报错
  340. *
  341. * @param value 被转换的值
  342. * @return 结果
  343. */
  344. public static Long toLong(Object value) {
  345. return toLong(value, null);
  346. }
  347. /**
  348. * 转换为double<br>
  349. * 如果给定的值为空,或者转换失败,返回默认值<br>
  350. * 转换失败不会报错
  351. *
  352. * @param value 被转换的值
  353. * @param defaultValue 转换错误时的默认值
  354. * @return 结果
  355. */
  356. public static Double toDouble(Object value, Double defaultValue) {
  357. if (value == null) {
  358. return defaultValue;
  359. }
  360. if (value instanceof Double) {
  361. return (Double) value;
  362. }
  363. if (value instanceof Number) {
  364. return ((Number) value).doubleValue();
  365. }
  366. final String valueStr = toStr(value, null);
  367. if (StringUtils.isEmpty(valueStr)) {
  368. return defaultValue;
  369. }
  370. try {
  371. // 支持科学计数法
  372. return new BigDecimal(valueStr.trim()).doubleValue();
  373. } catch (Exception e) {
  374. return defaultValue;
  375. }
  376. }
  377. /**
  378. * 转换为double<br>
  379. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  380. * 转换失败不会报错
  381. *
  382. * @param value 被转换的值
  383. * @return 结果
  384. */
  385. public static Double toDouble(Object value) {
  386. return toDouble(value, null);
  387. }
  388. /**
  389. * 转换为Float<br>
  390. * 如果给定的值为空,或者转换失败,返回默认值<br>
  391. * 转换失败不会报错
  392. *
  393. * @param value 被转换的值
  394. * @param defaultValue 转换错误时的默认值
  395. * @return 结果
  396. */
  397. public static Float toFloat(Object value, Float defaultValue) {
  398. if (value == null) {
  399. return defaultValue;
  400. }
  401. if (value instanceof Float) {
  402. return (Float) value;
  403. }
  404. if (value instanceof Number) {
  405. return ((Number) value).floatValue();
  406. }
  407. final String valueStr = toStr(value, null);
  408. if (StringUtils.isEmpty(valueStr)) {
  409. return defaultValue;
  410. }
  411. try {
  412. return Float.parseFloat(valueStr.trim());
  413. } catch (Exception e) {
  414. return defaultValue;
  415. }
  416. }
  417. /**
  418. * 转换为Float<br>
  419. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  420. * 转换失败不会报错
  421. *
  422. * @param value 被转换的值
  423. * @return 结果
  424. */
  425. public static Float toFloat(Object value) {
  426. return toFloat(value, null);
  427. }
  428. /**
  429. * 转换为boolean<br>
  430. * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br>
  431. * 转换失败不会报错
  432. *
  433. * @param value 被转换的值
  434. * @param defaultValue 转换错误时的默认值
  435. * @return 结果
  436. */
  437. public static Boolean toBool(Object value, Boolean defaultValue) {
  438. if (value == null) {
  439. return defaultValue;
  440. }
  441. if (value instanceof Boolean) {
  442. return (Boolean) value;
  443. }
  444. String valueStr = toStr(value, null);
  445. if (StringUtils.isEmpty(valueStr)) {
  446. return defaultValue;
  447. }
  448. valueStr = valueStr.trim().toLowerCase();
  449. switch (valueStr) {
  450. case "true":
  451. return true;
  452. case "false":
  453. return false;
  454. case "yes":
  455. return true;
  456. case "ok":
  457. return true;
  458. case "no":
  459. return false;
  460. case "1":
  461. return true;
  462. case "0":
  463. return false;
  464. default:
  465. return defaultValue;
  466. }
  467. }
  468. /**
  469. * 转换为boolean<br>
  470. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  471. * 转换失败不会报错
  472. *
  473. * @param value 被转换的值
  474. * @return 结果
  475. */
  476. public static Boolean toBool(Object value) {
  477. return toBool(value, null);
  478. }
  479. /**
  480. * 转换为Enum对象<br>
  481. * 如果给定的值为空,或者转换失败,返回默认值<br>
  482. *
  483. * @param clazz Enum的Class
  484. * @param value 值
  485. * @param defaultValue 默认值
  486. * @return Enum
  487. */
  488. public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue) {
  489. if (value == null) {
  490. return defaultValue;
  491. }
  492. if (clazz.isAssignableFrom(value.getClass())) {
  493. @SuppressWarnings("unchecked")
  494. E myE = (E) value;
  495. return myE;
  496. }
  497. final String valueStr = toStr(value, null);
  498. if (StringUtils.isEmpty(valueStr)) {
  499. return defaultValue;
  500. }
  501. try {
  502. return Enum.valueOf(clazz, valueStr);
  503. } catch (Exception e) {
  504. return defaultValue;
  505. }
  506. }
  507. /**
  508. * 转换为Enum对象<br>
  509. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  510. *
  511. * @param clazz Enum的Class
  512. * @param value 值
  513. * @return Enum
  514. */
  515. public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value) {
  516. return toEnum(clazz, value, null);
  517. }
  518. /**
  519. * 转换为BigInteger<br>
  520. * 如果给定的值为空,或者转换失败,返回默认值<br>
  521. * 转换失败不会报错
  522. *
  523. * @param value 被转换的值
  524. * @param defaultValue 转换错误时的默认值
  525. * @return 结果
  526. */
  527. public static BigInteger toBigInteger(Object value, BigInteger defaultValue) {
  528. if (value == null) {
  529. return defaultValue;
  530. }
  531. if (value instanceof BigInteger) {
  532. return (BigInteger) value;
  533. }
  534. if (value instanceof Long) {
  535. return BigInteger.valueOf((Long) value);
  536. }
  537. final String valueStr = toStr(value, null);
  538. if (StringUtils.isEmpty(valueStr)) {
  539. return defaultValue;
  540. }
  541. try {
  542. return new BigInteger(valueStr);
  543. } catch (Exception e) {
  544. return defaultValue;
  545. }
  546. }
  547. /**
  548. * 转换为BigInteger<br>
  549. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  550. * 转换失败不会报错
  551. *
  552. * @param value 被转换的值
  553. * @return 结果
  554. */
  555. public static BigInteger toBigInteger(Object value) {
  556. return toBigInteger(value, null);
  557. }
  558. /**
  559. * 转换为BigDecimal<br>
  560. * 如果给定的值为空,或者转换失败,返回默认值<br>
  561. * 转换失败不会报错
  562. *
  563. * @param value 被转换的值
  564. * @param defaultValue 转换错误时的默认值
  565. * @return 结果
  566. */
  567. public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) {
  568. if (value == null) {
  569. return defaultValue;
  570. }
  571. if (value instanceof BigDecimal) {
  572. return (BigDecimal) value;
  573. }
  574. if (value instanceof Long) {
  575. return new BigDecimal((Long) value);
  576. }
  577. if (value instanceof Double) {
  578. return new BigDecimal((Double) value);
  579. }
  580. if (value instanceof Integer) {
  581. return new BigDecimal((Integer) value);
  582. }
  583. final String valueStr = toStr(value, null);
  584. if (StringUtils.isEmpty(valueStr)) {
  585. return defaultValue;
  586. }
  587. try {
  588. return new BigDecimal(valueStr);
  589. } catch (Exception e) {
  590. return defaultValue;
  591. }
  592. }
  593. /**
  594. * 转换为BigDecimal<br>
  595. * 如果给定的值为空,或者转换失败,返回默认值<br>
  596. * 转换失败不会报错
  597. *
  598. * @param value 被转换的值
  599. * @return 结果
  600. */
  601. public static BigDecimal toBigDecimal(Object value) {
  602. return toBigDecimal(value, null);
  603. }
  604. /**
  605. * 将对象转为字符串<br>
  606. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  607. *
  608. * @param obj 对象
  609. * @return 字符串
  610. */
  611. public static String utf8Str(Object obj) {
  612. return str(obj, CharsetKit.CHARSET_UTF_8);
  613. }
  614. /**
  615. * 将对象转为字符串<br>
  616. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  617. *
  618. * @param obj 对象
  619. * @param charsetName 字符集
  620. * @return 字符串
  621. */
  622. public static String str(Object obj, String charsetName) {
  623. return str(obj, Charset.forName(charsetName));
  624. }
  625. /**
  626. * 将对象转为字符串<br>
  627. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  628. *
  629. * @param obj 对象
  630. * @param charset 字符集
  631. * @return 字符串
  632. */
  633. public static String str(Object obj, Charset charset) {
  634. if (null == obj) {
  635. return null;
  636. }
  637. if (obj instanceof String) {
  638. return (String) obj;
  639. } else if (obj instanceof byte[] || obj instanceof Byte[]) {
  640. return str((Byte[]) obj, charset);
  641. } else if (obj instanceof ByteBuffer) {
  642. return str((ByteBuffer) obj, charset);
  643. }
  644. return obj.toString();
  645. }
  646. /**
  647. * 将byte数组转为字符串
  648. *
  649. * @param bytes byte数组
  650. * @param charset 字符集
  651. * @return 字符串
  652. */
  653. public static String str(byte[] bytes, String charset) {
  654. return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
  655. }
  656. /**
  657. * 解码字节码
  658. *
  659. * @param data 字符串
  660. * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
  661. * @return 解码后的字符串
  662. */
  663. public static String str(byte[] data, Charset charset) {
  664. if (data == null) {
  665. return null;
  666. }
  667. if (null == charset) {
  668. return new String(data);
  669. }
  670. return new String(data, charset);
  671. }
  672. /**
  673. * 将编码的byteBuffer数据转换为字符串
  674. *
  675. * @param data 数据
  676. * @param charset 字符集,如果为空使用当前系统字符集
  677. * @return 字符串
  678. */
  679. public static String str(ByteBuffer data, String charset) {
  680. if (data == null) {
  681. return null;
  682. }
  683. return str(data, Charset.forName(charset));
  684. }
  685. /**
  686. * 将编码的byteBuffer数据转换为字符串
  687. *
  688. * @param data 数据
  689. * @param charset 字符集,如果为空使用当前系统字符集
  690. * @return 字符串
  691. */
  692. public static String str(ByteBuffer data, Charset charset) {
  693. if (null == charset) {
  694. charset = Charset.defaultCharset();
  695. }
  696. return charset.decode(data).toString();
  697. }
  698. // ----------------------------------------------------------------------- 全角半角转换
  699. /**
  700. * 半角转全角
  701. *
  702. * @param input String.
  703. * @return 全角字符串.
  704. */
  705. public static String toSBC(String input) {
  706. return toSBC(input, null);
  707. }
  708. /**
  709. * 半角转全角
  710. *
  711. * @param input String
  712. * @param notConvertSet 不替换的字符集合
  713. * @return 全角字符串.
  714. */
  715. public static String toSBC(String input, Set<Character> notConvertSet) {
  716. char c[] = input.toCharArray();
  717. for (int i = 0; i < c.length; i++) {
  718. if (null != notConvertSet && notConvertSet.contains(c[i])) {
  719. // 跳过不替换的字符
  720. continue;
  721. }
  722. if (c[i] == ' ') {
  723. c[i] = '\u3000';
  724. } else if (c[i] < '\177') {
  725. c[i] = (char) (c[i] + 65248);
  726. }
  727. }
  728. return new String(c);
  729. }
  730. /**
  731. * 全角转半角
  732. *
  733. * @param input String.
  734. * @return 半角字符串
  735. */
  736. public static String toDBC(String input) {
  737. return toDBC(input, null);
  738. }
  739. /**
  740. * 替换全角为半角
  741. *
  742. * @param text 文本
  743. * @param notConvertSet 不替换的字符集合
  744. * @return 替换后的字符
  745. */
  746. public static String toDBC(String text, Set<Character> notConvertSet) {
  747. char c[] = text.toCharArray();
  748. for (int i = 0; i < c.length; i++) {
  749. if (null != notConvertSet && notConvertSet.contains(c[i])) {
  750. // 跳过不替换的字符
  751. continue;
  752. }
  753. if (c[i] == '\u3000') {
  754. c[i] = ' ';
  755. } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
  756. c[i] = (char) (c[i] - 65248);
  757. }
  758. }
  759. String returnString = new String(c);
  760. return returnString;
  761. }
  762. /**
  763. * 数字金额大写转换 先写个完整的然后将如零拾替换成零
  764. *
  765. * @param n 数字
  766. * @return 中文大写数字
  767. */
  768. public static String digitUppercase(double n) {
  769. String[] fraction = {"角", "分"};
  770. String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
  771. String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}};
  772. String head = n < 0 ? "负" : "";
  773. n = Math.abs(n);
  774. String s = "";
  775. for (int i = 0; i < fraction.length; i++) {
  776. s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
  777. }
  778. if (s.length() < 1) {
  779. s = "整";
  780. }
  781. int integerPart = (int) Math.floor(n);
  782. for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
  783. String p = "";
  784. for (int j = 0; j < unit[1].length && n > 0; j++) {
  785. p = digit[integerPart % 10] + unit[1][j] + p;
  786. integerPart = integerPart / 10;
  787. }
  788. s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
  789. }
  790. return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
  791. }
  792. }