Convert.java 25 KB

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