Convert.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999
  1. package com.ruoyi.common.support;
  2. import java.math.BigDecimal;
  3. import java.math.BigInteger;
  4. import java.nio.ByteBuffer;
  5. import java.nio.charset.Charset;
  6. import java.text.NumberFormat;
  7. import java.util.Set;
  8. import com.ruoyi.common.utils.StringUtils;
  9. /**
  10. * 类型转换器
  11. *
  12. * @author ruoyi
  13. */
  14. public class Convert
  15. {
  16. /**
  17. * 转换为字符串<br>
  18. * 如果给定的值为null,或者转换失败,返回默认值<br>
  19. * 转换失败不会报错
  20. *
  21. * @param value 被转换的值
  22. * @param defaultValue 转换错误时的默认值
  23. * @return 结果
  24. */
  25. public static String toStr(Object value, String defaultValue)
  26. {
  27. if (null == value)
  28. {
  29. return defaultValue;
  30. }
  31. if (value instanceof String)
  32. {
  33. return (String) value;
  34. }
  35. return value.toString();
  36. }
  37. /**
  38. * 转换为字符串<br>
  39. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  40. * 转换失败不会报错
  41. *
  42. * @param value 被转换的值
  43. * @return 结果
  44. */
  45. public static String toStr(Object value)
  46. {
  47. return toStr(value, null);
  48. }
  49. /**
  50. * 转换为字符<br>
  51. * 如果给定的值为null,或者转换失败,返回默认值<br>
  52. * 转换失败不会报错
  53. *
  54. * @param value 被转换的值
  55. * @param defaultValue 转换错误时的默认值
  56. * @return 结果
  57. */
  58. public static Character toChar(Object value, Character defaultValue)
  59. {
  60. if (null == value)
  61. {
  62. return defaultValue;
  63. }
  64. if (value instanceof Character)
  65. {
  66. return (Character) value;
  67. }
  68. final String valueStr = toStr(value, null);
  69. return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
  70. }
  71. /**
  72. * 转换为字符<br>
  73. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  74. * 转换失败不会报错
  75. *
  76. * @param value 被转换的值
  77. * @return 结果
  78. */
  79. public static Character toChar(Object value)
  80. {
  81. return toChar(value, null);
  82. }
  83. /**
  84. * 转换为byte<br>
  85. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
  86. * 转换失败不会报错
  87. *
  88. * @param value 被转换的值
  89. * @param defaultValue 转换错误时的默认值
  90. * @return 结果
  91. */
  92. public static Byte toByte(Object value, Byte defaultValue)
  93. {
  94. if (value == null)
  95. {
  96. return defaultValue;
  97. }
  98. if (value instanceof Byte)
  99. {
  100. return (Byte) value;
  101. }
  102. if (value instanceof Number)
  103. {
  104. return ((Number) value).byteValue();
  105. }
  106. final String valueStr = toStr(value, null);
  107. if (StringUtils.isEmpty(valueStr))
  108. {
  109. return defaultValue;
  110. }
  111. try
  112. {
  113. return Byte.parseByte(valueStr);
  114. }
  115. catch (Exception e)
  116. {
  117. return defaultValue;
  118. }
  119. }
  120. /**
  121. * 转换为byte<br>
  122. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  123. * 转换失败不会报错
  124. *
  125. * @param value 被转换的值
  126. * @return 结果
  127. */
  128. public static Byte toByte(Object value)
  129. {
  130. return toByte(value, null);
  131. }
  132. /**
  133. * 转换为Short<br>
  134. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
  135. * 转换失败不会报错
  136. *
  137. * @param value 被转换的值
  138. * @param defaultValue 转换错误时的默认值
  139. * @return 结果
  140. */
  141. public static Short toShort(Object value, Short defaultValue)
  142. {
  143. if (value == null)
  144. {
  145. return defaultValue;
  146. }
  147. if (value instanceof Short)
  148. {
  149. return (Short) value;
  150. }
  151. if (value instanceof Number)
  152. {
  153. return ((Number) value).shortValue();
  154. }
  155. final String valueStr = toStr(value, null);
  156. if (StringUtils.isEmpty(valueStr))
  157. {
  158. return defaultValue;
  159. }
  160. try
  161. {
  162. return Short.parseShort(valueStr.trim());
  163. }
  164. catch (Exception e)
  165. {
  166. return defaultValue;
  167. }
  168. }
  169. /**
  170. * 转换为Short<br>
  171. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  172. * 转换失败不会报错
  173. *
  174. * @param value 被转换的值
  175. * @return 结果
  176. */
  177. public static Short toShort(Object value)
  178. {
  179. return toShort(value, null);
  180. }
  181. /**
  182. * 转换为Number<br>
  183. * 如果给定的值为空,或者转换失败,返回默认值<br>
  184. * 转换失败不会报错
  185. *
  186. * @param value 被转换的值
  187. * @param defaultValue 转换错误时的默认值
  188. * @return 结果
  189. */
  190. public static Number toNumber(Object value, Number defaultValue)
  191. {
  192. if (value == null)
  193. {
  194. return defaultValue;
  195. }
  196. if (value instanceof Number)
  197. {
  198. return (Number) value;
  199. }
  200. final String valueStr = toStr(value, null);
  201. if (StringUtils.isEmpty(valueStr))
  202. {
  203. return defaultValue;
  204. }
  205. try
  206. {
  207. return NumberFormat.getInstance().parse(valueStr);
  208. }
  209. catch (Exception e)
  210. {
  211. return defaultValue;
  212. }
  213. }
  214. /**
  215. * 转换为Number<br>
  216. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  217. * 转换失败不会报错
  218. *
  219. * @param value 被转换的值
  220. * @return 结果
  221. */
  222. public static Number toNumber(Object value)
  223. {
  224. return toNumber(value, null);
  225. }
  226. /**
  227. * 转换为int<br>
  228. * 如果给定的值为空,或者转换失败,返回默认值<br>
  229. * 转换失败不会报错
  230. *
  231. * @param value 被转换的值
  232. * @param defaultValue 转换错误时的默认值
  233. * @return 结果
  234. */
  235. public static Integer toInt(Object value, Integer defaultValue)
  236. {
  237. if (value == null)
  238. {
  239. return defaultValue;
  240. }
  241. if (value instanceof Integer)
  242. {
  243. return (Integer) value;
  244. }
  245. if (value instanceof Number)
  246. {
  247. return ((Number) value).intValue();
  248. }
  249. final String valueStr = toStr(value, null);
  250. if (StringUtils.isEmpty(valueStr))
  251. {
  252. return defaultValue;
  253. }
  254. try
  255. {
  256. return Integer.parseInt(valueStr.trim());
  257. }
  258. catch (Exception e)
  259. {
  260. return defaultValue;
  261. }
  262. }
  263. /**
  264. * 转换为int<br>
  265. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  266. * 转换失败不会报错
  267. *
  268. * @param value 被转换的值
  269. * @return 结果
  270. */
  271. public static Integer toInt(Object value)
  272. {
  273. return toInt(value, null);
  274. }
  275. /**
  276. * 转换为Integer数组<br>
  277. *
  278. * @param str 被转换的值
  279. * @return 结果
  280. */
  281. public static Integer[] toIntArray(String str)
  282. {
  283. return toIntArray(",", str);
  284. }
  285. /**
  286. * 转换为Long数组<br>
  287. *
  288. * @param str 被转换的值
  289. * @return 结果
  290. */
  291. public static Long[] toLongArray(String str)
  292. {
  293. return toLongArray(",", str);
  294. }
  295. /**
  296. * 转换为Integer数组<br>
  297. *
  298. * @param split 分隔符
  299. * @param split 被转换的值
  300. * @return 结果
  301. */
  302. public static Integer[] toIntArray(String split, String str)
  303. {
  304. if (StringUtils.isEmpty(str))
  305. {
  306. return new Integer[] {};
  307. }
  308. String[] arr = str.split(split);
  309. final Integer[] ints = new Integer[arr.length];
  310. for (int i = 0; i < arr.length; i++)
  311. {
  312. final Integer v = toInt(arr[i], 0);
  313. ints[i] = v;
  314. }
  315. return ints;
  316. }
  317. /**
  318. * 转换为Long数组<br>
  319. *
  320. * @param split 分隔符
  321. * @param str 被转换的值
  322. * @return 结果
  323. */
  324. public static Long[] toLongArray(String split, String str)
  325. {
  326. if (StringUtils.isEmpty(str))
  327. {
  328. return new Long[] {};
  329. }
  330. String[] arr = str.split(split);
  331. final Long[] longs = new Long[arr.length];
  332. for (int i = 0; i < arr.length; i++)
  333. {
  334. final Long v = toLong(arr[i], null);
  335. longs[i] = v;
  336. }
  337. return longs;
  338. }
  339. /**
  340. * 转换为String数组<br>
  341. *
  342. * @param str 被转换的值
  343. * @return 结果
  344. */
  345. public static String[] toStrArray(String str)
  346. {
  347. return toStrArray(",", str);
  348. }
  349. /**
  350. * 转换为String数组<br>
  351. *
  352. * @param split 分隔符
  353. * @param split 被转换的值
  354. * @return 结果
  355. */
  356. public static String[] toStrArray(String split, String str)
  357. {
  358. return str.split(split);
  359. }
  360. /**
  361. * 转换为long<br>
  362. * 如果给定的值为空,或者转换失败,返回默认值<br>
  363. * 转换失败不会报错
  364. *
  365. * @param value 被转换的值
  366. * @param defaultValue 转换错误时的默认值
  367. * @return 结果
  368. */
  369. public static Long toLong(Object value, Long defaultValue)
  370. {
  371. if (value == null)
  372. {
  373. return defaultValue;
  374. }
  375. if (value instanceof Long)
  376. {
  377. return (Long) value;
  378. }
  379. if (value instanceof Number)
  380. {
  381. return ((Number) value).longValue();
  382. }
  383. final String valueStr = toStr(value, null);
  384. if (StringUtils.isEmpty(valueStr))
  385. {
  386. return defaultValue;
  387. }
  388. try
  389. {
  390. // 支持科学计数法
  391. return new BigDecimal(valueStr.trim()).longValue();
  392. }
  393. catch (Exception e)
  394. {
  395. return defaultValue;
  396. }
  397. }
  398. /**
  399. * 转换为long<br>
  400. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  401. * 转换失败不会报错
  402. *
  403. * @param value 被转换的值
  404. * @return 结果
  405. */
  406. public static Long toLong(Object value)
  407. {
  408. return toLong(value, null);
  409. }
  410. /**
  411. * 转换为double<br>
  412. * 如果给定的值为空,或者转换失败,返回默认值<br>
  413. * 转换失败不会报错
  414. *
  415. * @param value 被转换的值
  416. * @param defaultValue 转换错误时的默认值
  417. * @return 结果
  418. */
  419. public static Double toDouble(Object value, Double defaultValue)
  420. {
  421. if (value == null)
  422. {
  423. return defaultValue;
  424. }
  425. if (value instanceof Double)
  426. {
  427. return (Double) value;
  428. }
  429. if (value instanceof Number)
  430. {
  431. return ((Number) value).doubleValue();
  432. }
  433. final String valueStr = toStr(value, null);
  434. if (StringUtils.isEmpty(valueStr))
  435. {
  436. return defaultValue;
  437. }
  438. try
  439. {
  440. // 支持科学计数法
  441. return new BigDecimal(valueStr.trim()).doubleValue();
  442. }
  443. catch (Exception e)
  444. {
  445. return defaultValue;
  446. }
  447. }
  448. /**
  449. * 转换为double<br>
  450. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  451. * 转换失败不会报错
  452. *
  453. * @param value 被转换的值
  454. * @return 结果
  455. */
  456. public static Double toDouble(Object value)
  457. {
  458. return toDouble(value, null);
  459. }
  460. /**
  461. * 转换为Float<br>
  462. * 如果给定的值为空,或者转换失败,返回默认值<br>
  463. * 转换失败不会报错
  464. *
  465. * @param value 被转换的值
  466. * @param defaultValue 转换错误时的默认值
  467. * @return 结果
  468. */
  469. public static Float toFloat(Object value, Float defaultValue)
  470. {
  471. if (value == null)
  472. {
  473. return defaultValue;
  474. }
  475. if (value instanceof Float)
  476. {
  477. return (Float) value;
  478. }
  479. if (value instanceof Number)
  480. {
  481. return ((Number) value).floatValue();
  482. }
  483. final String valueStr = toStr(value, null);
  484. if (StringUtils.isEmpty(valueStr))
  485. {
  486. return defaultValue;
  487. }
  488. try
  489. {
  490. return Float.parseFloat(valueStr.trim());
  491. }
  492. catch (Exception e)
  493. {
  494. return defaultValue;
  495. }
  496. }
  497. /**
  498. * 转换为Float<br>
  499. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  500. * 转换失败不会报错
  501. *
  502. * @param value 被转换的值
  503. * @return 结果
  504. */
  505. public static Float toFloat(Object value)
  506. {
  507. return toFloat(value, null);
  508. }
  509. /**
  510. * 转换为boolean<br>
  511. * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br>
  512. * 转换失败不会报错
  513. *
  514. * @param value 被转换的值
  515. * @param defaultValue 转换错误时的默认值
  516. * @return 结果
  517. */
  518. public static Boolean toBool(Object value, Boolean defaultValue)
  519. {
  520. if (value == null)
  521. {
  522. return defaultValue;
  523. }
  524. if (value instanceof Boolean)
  525. {
  526. return (Boolean) value;
  527. }
  528. String valueStr = toStr(value, null);
  529. if (StringUtils.isEmpty(valueStr))
  530. {
  531. return defaultValue;
  532. }
  533. valueStr = valueStr.trim().toLowerCase();
  534. switch (valueStr)
  535. {
  536. case "true":
  537. return true;
  538. case "false":
  539. return false;
  540. case "yes":
  541. return true;
  542. case "ok":
  543. return true;
  544. case "no":
  545. return false;
  546. case "1":
  547. return true;
  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 new BigDecimal((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[] || obj instanceof Byte[])
  761. {
  762. return str((Byte[]) obj, charset);
  763. }
  764. else if (obj instanceof ByteBuffer)
  765. {
  766. return str((ByteBuffer) obj, charset);
  767. }
  768. return obj.toString();
  769. }
  770. /**
  771. * 将byte数组转为字符串
  772. *
  773. * @param bytes byte数组
  774. * @param charset 字符集
  775. * @return 字符串
  776. */
  777. public static String str(byte[] bytes, String charset)
  778. {
  779. return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
  780. }
  781. /**
  782. * 解码字节码
  783. *
  784. * @param data 字符串
  785. * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
  786. * @return 解码后的字符串
  787. */
  788. public static String str(byte[] data, Charset charset)
  789. {
  790. if (data == null)
  791. {
  792. return null;
  793. }
  794. if (null == charset)
  795. {
  796. return new String(data);
  797. }
  798. return new String(data, charset);
  799. }
  800. /**
  801. * 将编码的byteBuffer数据转换为字符串
  802. *
  803. * @param data 数据
  804. * @param charset 字符集,如果为空使用当前系统字符集
  805. * @return 字符串
  806. */
  807. public static String str(ByteBuffer data, String charset)
  808. {
  809. if (data == null)
  810. {
  811. return null;
  812. }
  813. return str(data, Charset.forName(charset));
  814. }
  815. /**
  816. * 将编码的byteBuffer数据转换为字符串
  817. *
  818. * @param data 数据
  819. * @param charset 字符集,如果为空使用当前系统字符集
  820. * @return 字符串
  821. */
  822. public static String str(ByteBuffer data, Charset charset)
  823. {
  824. if (null == charset)
  825. {
  826. charset = Charset.defaultCharset();
  827. }
  828. return charset.decode(data).toString();
  829. }
  830. // ----------------------------------------------------------------------- 全角半角转换
  831. /**
  832. * 半角转全角
  833. *
  834. * @param input String.
  835. * @return 全角字符串.
  836. */
  837. public static String toSBC(String input)
  838. {
  839. return toSBC(input, null);
  840. }
  841. /**
  842. * 半角转全角
  843. *
  844. * @param input String
  845. * @param notConvertSet 不替换的字符集合
  846. * @return 全角字符串.
  847. */
  848. public static String toSBC(String input, Set<Character> notConvertSet)
  849. {
  850. char c[] = input.toCharArray();
  851. for (int i = 0; i < c.length; i++)
  852. {
  853. if (null != notConvertSet && notConvertSet.contains(c[i]))
  854. {
  855. // 跳过不替换的字符
  856. continue;
  857. }
  858. if (c[i] == ' ')
  859. {
  860. c[i] = '\u3000';
  861. }
  862. else if (c[i] < '\177')
  863. {
  864. c[i] = (char) (c[i] + 65248);
  865. }
  866. }
  867. return new String(c);
  868. }
  869. /**
  870. * 全角转半角
  871. *
  872. * @param input String.
  873. * @return 半角字符串
  874. */
  875. public static String toDBC(String input)
  876. {
  877. return toDBC(input, null);
  878. }
  879. /**
  880. * 替换全角为半角
  881. *
  882. * @param text 文本
  883. * @param notConvertSet 不替换的字符集合
  884. * @return 替换后的字符
  885. */
  886. public static String toDBC(String text, Set<Character> notConvertSet)
  887. {
  888. char c[] = text.toCharArray();
  889. for (int i = 0; i < c.length; i++)
  890. {
  891. if (null != notConvertSet && notConvertSet.contains(c[i]))
  892. {
  893. // 跳过不替换的字符
  894. continue;
  895. }
  896. if (c[i] == '\u3000')
  897. {
  898. c[i] = ' ';
  899. }
  900. else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
  901. {
  902. c[i] = (char) (c[i] - 65248);
  903. }
  904. }
  905. String returnString = new String(c);
  906. return returnString;
  907. }
  908. /**
  909. * 数字金额大写转换 先写个完整的然后将如零拾替换成零
  910. *
  911. * @param n 数字
  912. * @return 中文大写数字
  913. */
  914. public static String digitUppercase(double n)
  915. {
  916. String[] fraction = { "角", "分" };
  917. String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
  918. String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
  919. String head = n < 0 ? "负" : "";
  920. n = Math.abs(n);
  921. String s = "";
  922. for (int i = 0; i < fraction.length; i++)
  923. {
  924. s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
  925. }
  926. if (s.length() < 1)
  927. {
  928. s = "整";
  929. }
  930. int integerPart = (int) Math.floor(n);
  931. for (int i = 0; i < unit[0].length && integerPart > 0; i++)
  932. {
  933. String p = "";
  934. for (int j = 0; j < unit[1].length && n > 0; j++)
  935. {
  936. p = digit[integerPart % 10] + unit[1][j] + p;
  937. integerPart = integerPart / 10;
  938. }
  939. s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
  940. }
  941. return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
  942. }
  943. }