日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法...

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本文中,我們將向您展示幾種在Java中將String類型的字符串字母倒序的幾種方法。

  • StringBuilder(str).reverse()
  • char[]循環與值交換
  • byte循環與值交換
  • apache-commons-lang3

如果是為了進行開發,請選擇StringBuilder(str).reverse()API。出于學習的目的,我們可以研究char[]和byte方法,其中涉及到值互換和移位運算技術,這些技術對于了解StringBuilder(str).reverse()API黑匣子背后原理非常有幫助。

1. StringBuilder(str).reverse()

在Java中,我們可以使用StringBuilder(str).reverse()使字符串字母倒序。

public class ReverseString1 {public static void main(String[] args) {String str = "Reverse a String in Java";StringBuilder sb = new StringBuilder(str).reverse();System.out.println(sb.toString());} }

輸出結果

avaJ ni gnirtS a esreveR

2.char[]

首先,我們將字符串轉換為char數組,并逐個循環char數組,并使用temp變量交換值。

public class ReverseString2 {public static void main(String[] args) {String str = "Hello World";System.out.println(reverse(str)); // dlroW olleH}public static String reverse(String input) {if (input == null || input.length() < 0)throw new IllegalArgumentException("Please provide an input!");char[] result = input.toCharArray();int startIndex = 0;int endIndex = result.length - 1;char temp;for (; endIndex > startIndex; startIndex++, endIndex--) {temp = result[startIndex];result[startIndex] = result[endIndex];result[endIndex] = temp;}return new String(result);}}

上面的算法需要5個循環(長度/ 2)來使字符串倒序“ Hello World”。

------------------------------------ H e l l o W o r l d ------------------------------------ 0 1 2 3 4 5 6 7 8 9 10 ------------------------------------Loop #1 - Swap index 0 <-> index 10 ------------------------------------ ozvdkddzhkzd e l l o W o r l {H} ------------------------------------ {0} 1 2 3 4 5 6 7 8 9 {10} ------------------------------------Loop #2 - Swap index 1 <-> index 9 ------------------------------------ d {l} l l o W o r {e} H ------------------------------------ 0 {1} 2 3 4 5 6 7 8 {9} 10 ------------------------------------Loop #3 - Swap index 2 <-> index 8 ------------------------------------ d l {r} l o W o {l} e H ------------------------------------ 0 1 {2} 3 4 5 6 7 {8} 9 10 ------------------------------------Loop #4 - Swap index 3 <-> index 7 ------------------------------------ d l r {o} o W {l} l e H ------------------------------------ 0 1 2 {3} 4 5 6 {7} 8 9 10 ------------------------------------Loop #5 - Swap index 4 <-> index 6 ------------------------------------ d l r o {W} {o} l l e H ------------------------------------ 0 1 2 3 {4} 5 {6} 7 8 9 10 ------------------------------------

3. Byte[] – StringBuilder(str).reverse(str)

以下代碼段類似于StringBuilder(str).reverse()的內部實現(UTF16內容除外)。

import java.nio.charset.StandardCharsets;public class ReverseString3 {public static void main(String[] args) {String str = "Hello World";System.out.println(reverse(str));}public static String reverse(String input) {if (input == null || input.length() < 0)throw new IllegalArgumentException("Please provide an input!");byte[] val = input.getBytes(StandardCharsets.UTF_8);int length = val.length - 1;for (int start = (length - 1) >> 1; start >= 0; start--) {int end = length - start;byte temp = val[start];val[start] = val[end];val[end] = temp;// debugging//System.out.println(String.format("start=%s, end=%s", start, end));}return new String(val);}}

最令人困惑的部分是右移運算符(length - 1) >> 1,這是什么意思?查看下面的8位示例,您可以找到規律嗎?

System.out.println(10>>1); // 10 -> 5 0000 1010 = 10 0000 0101|0 = 10 >> 1 = 5System.out.println(4>>1); // 4 -> 2 0000 0100 = 4 0000 0010|0 = 4 >> 1 = 2System.out.println(100>>1); // 100 -> 50 0110 0100 = 100 00110 010|0 = 100 >> 1 = 50System.out.println(7>>1); // 7 -> 3 0000 0111 = 7 0000 0011|1 = 7 >> 1 = 3

對于數字,每右移1位,金額將減少該值的一半并四舍五入。這(length - 1) >> 1試圖找出字符串的中間點。

number >> 1 = round_down(number/2) or Math.flooa(number/2)

值交換從內部開始,然后擴展到外部。

for (int start = (length - 1) >> 1; start >= 0; start--) {int end = length - start;byte temp = val[start];val[start] = val[end];val[end] = temp; }

上面的算法圖示如下:

------------------------------------ H e l l o W o r l d ------------------------------------ 0 1 2 3 4 5 6 7 8 9 10 ------------------------------------Loop #1 - Swap index 4 <-> index 6 ------------------------------------ H e l l {W} {o} o r l d ------------------------------------ 0 1 2 3 {4} 5 {6} 7 8 9 10 ------------------------------------Loop #2 - Swap index 3 <-> index 7 ------------------------------------ H e l {o} W o {l} r l d ------------------------------------ 0 1 2 {3} 4 5 6 {7} 8 9 10 ------------------------------------Loop #3 - Swap index 2 <-> index 8 ------------------------------------ H e {r} o W o l {l} l d ------------------------------------ 0 1 {2} 3 4 5 6 7 {8} 9 10 ------------------------------------Loop #4 - Swap index 1 <-> index 9 ------------------------------------ H {l} r o W o l l {e} d ------------------------------------ 0 {1} 2 3 4 5 6 7 8 {9} 10 ------------------------------------Loop #5 - Swap index 0 <-> index 10 ------------------------------------ ozvdkddzhkzd l r o W o l l e {H} ------------------------------------ {0} 1 2 3 4 5 6 7 8 9 {10} ------------------------------------

4. Apache commons-lang3

對于Apache commons-lang3庫,我們可以使用StringUtils.reverse反轉字符串和StringUtils.reverseDelimited反轉單詞。

pom.xml

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version> </dependency>import org.apache.commons.lang3.StringUtils;public class ReverseString3 {public static void main(String[] args) {System.out.println(StringUtils.reverse("Hello World Java")); // reverse stringSystem.out.println(StringUtils.reverseDelimited("Hello World Java", ' ')); // reverse words} }

輸出結果

avaJ dlroW olleHJava World Hello

查看其源代碼,Apache-commons-lang3其實是使用new StringBuilder(str).reverse()來反轉字符串。

package org.apache.commons.lang3;public class StringUtils {public static String reverse(final String str) {if (str == null) {return null;}return new StringBuilder(str).reverse().toString();}//... }

歡迎關注我的博客,里面有很多精品合集

  • 本文轉載注明出處(必須帶連接,不能只轉文字):字母哥博客。

覺得對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創作動力! 。另外,筆者最近一段時間輸出了如下的精品內容,期待您的關注。

  • 《手摸手教你學Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2一本通》
  • 《實戰前后端分離RBAC權限管理系統》
  • 《實戰SpringCloud微服務從青銅到王者》
  • 《VUE深入淺出系列》

總結

以上是生活随笔為你收集整理的delphi64位 char数组转换string中文乱码_使用位运算、值交换等方式反转java字符串-共四种方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。