Convert.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005
  1. package com.benyun.common.utils.text;
  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 org.apache.commons.lang3.ArrayUtils;
  9. import com.benyun.common.utils.StringUtils;
  10. /**
  11. * 类型转换器
  12. *
  13. * @author liugang
  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. return toStrArray(",", str);
  349. }
  350. /**
  351. * 转换为String数组<br>
  352. *
  353. * @param split 分隔符
  354. * @param split 被转换的值
  355. * @return 结果
  356. */
  357. public static String[] toStrArray(String split, String str)
  358. {
  359. return str.split(split);
  360. }
  361. /**
  362. * 转换为long<br>
  363. * 如果给定的值为空,或者转换失败,返回默认值<br>
  364. * 转换失败不会报错
  365. *
  366. * @param value 被转换的值
  367. * @param defaultValue 转换错误时的默认值
  368. * @return 结果
  369. */
  370. public static Long toLong(Object value, Long defaultValue)
  371. {
  372. if (value == null)
  373. {
  374. return defaultValue;
  375. }
  376. if (value instanceof Long)
  377. {
  378. return (Long) value;
  379. }
  380. if (value instanceof Number)
  381. {
  382. return ((Number) value).longValue();
  383. }
  384. final String valueStr = toStr(value, null);
  385. if (StringUtils.isEmpty(valueStr))
  386. {
  387. return defaultValue;
  388. }
  389. try
  390. {
  391. // 支持科学计数法
  392. return new BigDecimal(valueStr.trim()).longValue();
  393. }
  394. catch (Exception e)
  395. {
  396. return defaultValue;
  397. }
  398. }
  399. /**
  400. * 转换为long<br>
  401. * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
  402. * 转换失败不会报错
  403. *
  404. * @param value 被转换的值
  405. * @return 结果
  406. */
  407. public static Long toLong(Object value)
  408. {
  409. return toLong(value, null);
  410. }
  411. /**
  412. * 转换为double<br>
  413. * 如果给定的值为空,或者转换失败,返回默认值<br>
  414. * 转换失败不会报错
  415. *
  416. * @param value 被转换的值
  417. * @param defaultValue 转换错误时的默认值
  418. * @return 结果
  419. */
  420. public static Double toDouble(Object value, Double defaultValue)
  421. {
  422. if (value == null)
  423. {
  424. return defaultValue;
  425. }
  426. if (value instanceof Double)
  427. {
  428. return (Double) value;
  429. }
  430. if (value instanceof Number)
  431. {
  432. return ((Number) value).doubleValue();
  433. }
  434. final String valueStr = toStr(value, null);
  435. if (StringUtils.isEmpty(valueStr))
  436. {
  437. return defaultValue;
  438. }
  439. try
  440. {
  441. // 支持科学计数法
  442. return new BigDecimal(valueStr.trim()).doubleValue();
  443. }
  444. catch (Exception e)
  445. {
  446. return defaultValue;
  447. }
  448. }
  449. /**
  450. * 转换为double<br>
  451. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  452. * 转换失败不会报错
  453. *
  454. * @param value 被转换的值
  455. * @return 结果
  456. */
  457. public static Double toDouble(Object value)
  458. {
  459. return toDouble(value, null);
  460. }
  461. /**
  462. * 转换为Float<br>
  463. * 如果给定的值为空,或者转换失败,返回默认值<br>
  464. * 转换失败不会报错
  465. *
  466. * @param value 被转换的值
  467. * @param defaultValue 转换错误时的默认值
  468. * @return 结果
  469. */
  470. public static Float toFloat(Object value, Float defaultValue)
  471. {
  472. if (value == null)
  473. {
  474. return defaultValue;
  475. }
  476. if (value instanceof Float)
  477. {
  478. return (Float) value;
  479. }
  480. if (value instanceof Number)
  481. {
  482. return ((Number) value).floatValue();
  483. }
  484. final String valueStr = toStr(value, null);
  485. if (StringUtils.isEmpty(valueStr))
  486. {
  487. return defaultValue;
  488. }
  489. try
  490. {
  491. return Float.parseFloat(valueStr.trim());
  492. }
  493. catch (Exception e)
  494. {
  495. return defaultValue;
  496. }
  497. }
  498. /**
  499. * 转换为Float<br>
  500. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  501. * 转换失败不会报错
  502. *
  503. * @param value 被转换的值
  504. * @return 结果
  505. */
  506. public static Float toFloat(Object value)
  507. {
  508. return toFloat(value, null);
  509. }
  510. /**
  511. * 转换为boolean<br>
  512. * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br>
  513. * 转换失败不会报错
  514. *
  515. * @param value 被转换的值
  516. * @param defaultValue 转换错误时的默认值
  517. * @return 结果
  518. */
  519. public static Boolean toBool(Object value, Boolean defaultValue)
  520. {
  521. if (value == null)
  522. {
  523. return defaultValue;
  524. }
  525. if (value instanceof Boolean)
  526. {
  527. return (Boolean) value;
  528. }
  529. String valueStr = toStr(value, null);
  530. if (StringUtils.isEmpty(valueStr))
  531. {
  532. return defaultValue;
  533. }
  534. valueStr = valueStr.trim().toLowerCase();
  535. switch (valueStr)
  536. {
  537. case "true":
  538. return true;
  539. case "false":
  540. return false;
  541. case "yes":
  542. return true;
  543. case "ok":
  544. return true;
  545. case "no":
  546. return false;
  547. case "1":
  548. return true;
  549. case "0":
  550. return false;
  551. default:
  552. return defaultValue;
  553. }
  554. }
  555. /**
  556. * 转换为boolean<br>
  557. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  558. * 转换失败不会报错
  559. *
  560. * @param value 被转换的值
  561. * @return 结果
  562. */
  563. public static Boolean toBool(Object value)
  564. {
  565. return toBool(value, null);
  566. }
  567. /**
  568. * 转换为Enum对象<br>
  569. * 如果给定的值为空,或者转换失败,返回默认值<br>
  570. *
  571. * @param clazz Enum的Class
  572. * @param value 值
  573. * @param defaultValue 默认值
  574. * @return Enum
  575. */
  576. public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
  577. {
  578. if (value == null)
  579. {
  580. return defaultValue;
  581. }
  582. if (clazz.isAssignableFrom(value.getClass()))
  583. {
  584. @SuppressWarnings("unchecked")
  585. E myE = (E) value;
  586. return myE;
  587. }
  588. final String valueStr = toStr(value, null);
  589. if (StringUtils.isEmpty(valueStr))
  590. {
  591. return defaultValue;
  592. }
  593. try
  594. {
  595. return Enum.valueOf(clazz, valueStr);
  596. }
  597. catch (Exception e)
  598. {
  599. return defaultValue;
  600. }
  601. }
  602. /**
  603. * 转换为Enum对象<br>
  604. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  605. *
  606. * @param clazz Enum的Class
  607. * @param value 值
  608. * @return Enum
  609. */
  610. public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
  611. {
  612. return toEnum(clazz, value, null);
  613. }
  614. /**
  615. * 转换为BigInteger<br>
  616. * 如果给定的值为空,或者转换失败,返回默认值<br>
  617. * 转换失败不会报错
  618. *
  619. * @param value 被转换的值
  620. * @param defaultValue 转换错误时的默认值
  621. * @return 结果
  622. */
  623. public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
  624. {
  625. if (value == null)
  626. {
  627. return defaultValue;
  628. }
  629. if (value instanceof BigInteger)
  630. {
  631. return (BigInteger) value;
  632. }
  633. if (value instanceof Long)
  634. {
  635. return BigInteger.valueOf((Long) value);
  636. }
  637. final String valueStr = toStr(value, null);
  638. if (StringUtils.isEmpty(valueStr))
  639. {
  640. return defaultValue;
  641. }
  642. try
  643. {
  644. return new BigInteger(valueStr);
  645. }
  646. catch (Exception e)
  647. {
  648. return defaultValue;
  649. }
  650. }
  651. /**
  652. * 转换为BigInteger<br>
  653. * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
  654. * 转换失败不会报错
  655. *
  656. * @param value 被转换的值
  657. * @return 结果
  658. */
  659. public static BigInteger toBigInteger(Object value)
  660. {
  661. return toBigInteger(value, null);
  662. }
  663. /**
  664. * 转换为BigDecimal<br>
  665. * 如果给定的值为空,或者转换失败,返回默认值<br>
  666. * 转换失败不会报错
  667. *
  668. * @param value 被转换的值
  669. * @param defaultValue 转换错误时的默认值
  670. * @return 结果
  671. */
  672. public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
  673. {
  674. if (value == null)
  675. {
  676. return defaultValue;
  677. }
  678. if (value instanceof BigDecimal)
  679. {
  680. return (BigDecimal) value;
  681. }
  682. if (value instanceof Long)
  683. {
  684. return new BigDecimal((Long) value);
  685. }
  686. if (value instanceof Double)
  687. {
  688. return new BigDecimal((Double) value);
  689. }
  690. if (value instanceof Integer)
  691. {
  692. return new BigDecimal((Integer) value);
  693. }
  694. final String valueStr = toStr(value, null);
  695. if (StringUtils.isEmpty(valueStr))
  696. {
  697. return defaultValue;
  698. }
  699. try
  700. {
  701. return new BigDecimal(valueStr);
  702. }
  703. catch (Exception e)
  704. {
  705. return defaultValue;
  706. }
  707. }
  708. /**
  709. * 转换为BigDecimal<br>
  710. * 如果给定的值为空,或者转换失败,返回默认值<br>
  711. * 转换失败不会报错
  712. *
  713. * @param value 被转换的值
  714. * @return 结果
  715. */
  716. public static BigDecimal toBigDecimal(Object value)
  717. {
  718. return toBigDecimal(value, null);
  719. }
  720. /**
  721. * 将对象转为字符串<br>
  722. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  723. *
  724. * @param obj 对象
  725. * @return 字符串
  726. */
  727. public static String utf8Str(Object obj)
  728. {
  729. return str(obj, CharsetKit.CHARSET_UTF_8);
  730. }
  731. /**
  732. * 将对象转为字符串<br>
  733. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  734. *
  735. * @param obj 对象
  736. * @param charsetName 字符集
  737. * @return 字符串
  738. */
  739. public static String str(Object obj, String charsetName)
  740. {
  741. return str(obj, Charset.forName(charsetName));
  742. }
  743. /**
  744. * 将对象转为字符串<br>
  745. * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
  746. *
  747. * @param obj 对象
  748. * @param charset 字符集
  749. * @return 字符串
  750. */
  751. public static String str(Object obj, Charset charset)
  752. {
  753. if (null == obj)
  754. {
  755. return null;
  756. }
  757. if (obj instanceof String)
  758. {
  759. return (String) obj;
  760. }
  761. else if (obj instanceof byte[])
  762. {
  763. return str((byte[]) obj, charset);
  764. }
  765. else if (obj instanceof Byte[])
  766. {
  767. byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj);
  768. return str(bytes, charset);
  769. }
  770. else if (obj instanceof ByteBuffer)
  771. {
  772. return str((ByteBuffer) obj, charset);
  773. }
  774. return obj.toString();
  775. }
  776. /**
  777. * 将byte数组转为字符串
  778. *
  779. * @param bytes byte数组
  780. * @param charset 字符集
  781. * @return 字符串
  782. */
  783. public static String str(byte[] bytes, String charset)
  784. {
  785. return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
  786. }
  787. /**
  788. * 解码字节码
  789. *
  790. * @param data 字符串
  791. * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
  792. * @return 解码后的字符串
  793. */
  794. public static String str(byte[] data, Charset charset)
  795. {
  796. if (data == null)
  797. {
  798. return null;
  799. }
  800. if (null == charset)
  801. {
  802. return new String(data);
  803. }
  804. return new String(data, charset);
  805. }
  806. /**
  807. * 将编码的byteBuffer数据转换为字符串
  808. *
  809. * @param data 数据
  810. * @param charset 字符集,如果为空使用当前系统字符集
  811. * @return 字符串
  812. */
  813. public static String str(ByteBuffer data, String charset)
  814. {
  815. if (data == null)
  816. {
  817. return null;
  818. }
  819. return str(data, Charset.forName(charset));
  820. }
  821. /**
  822. * 将编码的byteBuffer数据转换为字符串
  823. *
  824. * @param data 数据
  825. * @param charset 字符集,如果为空使用当前系统字符集
  826. * @return 字符串
  827. */
  828. public static String str(ByteBuffer data, Charset charset)
  829. {
  830. if (null == charset)
  831. {
  832. charset = Charset.defaultCharset();
  833. }
  834. return charset.decode(data).toString();
  835. }
  836. // ----------------------------------------------------------------------- 全角半角转换
  837. /**
  838. * 半角转全角
  839. *
  840. * @param input String.
  841. * @return 全角字符串.
  842. */
  843. public static String toSBC(String input)
  844. {
  845. return toSBC(input, null);
  846. }
  847. /**
  848. * 半角转全角
  849. *
  850. * @param input String
  851. * @param notConvertSet 不替换的字符集合
  852. * @return 全角字符串.
  853. */
  854. public static String toSBC(String input, Set<Character> notConvertSet)
  855. {
  856. char c[] = input.toCharArray();
  857. for (int i = 0; i < c.length; i++)
  858. {
  859. if (null != notConvertSet && notConvertSet.contains(c[i]))
  860. {
  861. // 跳过不替换的字符
  862. continue;
  863. }
  864. if (c[i] == ' ')
  865. {
  866. c[i] = '\u3000';
  867. }
  868. else if (c[i] < '\177')
  869. {
  870. c[i] = (char) (c[i] + 65248);
  871. }
  872. }
  873. return new String(c);
  874. }
  875. /**
  876. * 全角转半角
  877. *
  878. * @param input String.
  879. * @return 半角字符串
  880. */
  881. public static String toDBC(String input)
  882. {
  883. return toDBC(input, null);
  884. }
  885. /**
  886. * 替换全角为半角
  887. *
  888. * @param text 文本
  889. * @param notConvertSet 不替换的字符集合
  890. * @return 替换后的字符
  891. */
  892. public static String toDBC(String text, Set<Character> notConvertSet)
  893. {
  894. char c[] = text.toCharArray();
  895. for (int i = 0; i < c.length; i++)
  896. {
  897. if (null != notConvertSet && notConvertSet.contains(c[i]))
  898. {
  899. // 跳过不替换的字符
  900. continue;
  901. }
  902. if (c[i] == '\u3000')
  903. {
  904. c[i] = ' ';
  905. }
  906. else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
  907. {
  908. c[i] = (char) (c[i] - 65248);
  909. }
  910. }
  911. String returnString = new String(c);
  912. return returnString;
  913. }
  914. /**
  915. * 数字金额大写转换 先写个完整的然后将如零拾替换成零
  916. *
  917. * @param n 数字
  918. * @return 中文大写数字
  919. */
  920. public static String digitUppercase(double n)
  921. {
  922. String[] fraction = { "角", "分" };
  923. String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
  924. String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
  925. String head = n < 0 ? "负" : "";
  926. n = Math.abs(n);
  927. String s = "";
  928. for (int i = 0; i < fraction.length; i++)
  929. {
  930. s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
  931. }
  932. if (s.length() < 1)
  933. {
  934. s = "整";
  935. }
  936. int integerPart = (int) Math.floor(n);
  937. for (int i = 0; i < unit[0].length && integerPart > 0; i++)
  938. {
  939. String p = "";
  940. for (int j = 0; j < unit[1].length && n > 0; j++)
  941. {
  942. p = digit[integerPart % 10] + unit[1][j] + p;
  943. integerPart = integerPart / 10;
  944. }
  945. s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
  946. }
  947. return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
  948. }
  949. }