中文字符串拼音轉化和首字母獲取demo

構建springboot項目,pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
        <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.1.4.RELEASE</version>
          <relativePath/>
        </parent>
        <groupId>com.cyclone</groupId>
        <artifactId>initials</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>initials</name>

        <properties>
            <java.version>1.8</java.version>
            <scala.version>2.11.7</scala.version>
            <scala.compat.version>2.11</scala.compat.version>
        </properties>

  <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    <dependency>
        <groupId>com.belerweb</groupId>
        <artifactId>pinyin4j</artifactId>
        <version>2.5.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
            </executions>
        </plugin>
    </plugins>
</build>
</project>

代碼實現(xiàn):

package com.cyclone
import net.sourceforge.pinyin4j.PinyinHelper
import net.sourceforge.pinyin4j.format.{HanyuPinyinCaseType, HanyuPinyinOutputFormat, HanyuPinyinToneType,    HanyuPinyinVCharType}

object Initials {
/**
* 將中文字符串分解為字,獲取每個字拼音的首字母,組成字符串返回
*
* @param chineseString           需要進行轉化的中文字符串,不能為null并且不能只包含非中文字符
* @param stripNoChineseCharacter 是否需要移除中文字符串中的非漢字字符,只有漢字字符才會進行轉化,其他的非漢字字符原樣返回
* @param caseType                返回字符串的大小寫樣式,默認為小寫
* @param toneType                返回的字母的聲調處理,默認為不帶聲調
* @param vCharType               返回字母的u處理方式,默認按v返回
* @return
*/
def chineseString2Initials(chineseString: String, stripNoChineseCharacter: Boolean = true, caseType: HanyuPinyinCaseType = HanyuPinyinCaseType.LOWERCASE,
                         toneType: HanyuPinyinToneType = HanyuPinyinToneType.WITHOUT_TONE,
                         vCharType: HanyuPinyinVCharType = HanyuPinyinVCharType.WITH_V): String = {
val tmp = if(stripNoChineseCharacter) strip(chineseString) else chineseString
val format = getFormatInstance(caseType, toneType, vCharType)
val result = StringBuilder.newBuilder
val words = tmp.toCharArray
words.foreach { (x: Char) =>
  if (x > 128) result.append(PinyinHelper.toHanyuPinyinStringArray(x, format)(0).charAt(0)) else result.append(x)
}
result.toString()
}


/**
* 將中文字符串分解為字,轉化為拼音,組成字符串返回
*
* @param chineseString           需要進行轉化的中文字符串,不能為null并且不能只包含非中文字符
* @param stripNoChineseCharacter 是否需要移除中文字符串中的非漢字字符,只有漢字字符才會進行轉化,其他的非漢字字符原樣返回
* @param caseType                返回字符串的大小寫樣式,默認為小寫
* @param toneType                返回的字母的聲調處理,默認為不帶聲調
* @param vCharType               返回字母的u處理方式,默認按v返回
* @return
*/
def chineseString2Letters(chineseString: String, stripNoChineseCharacter: Boolean = true, caseType: HanyuPinyinCaseType = HanyuPinyinCaseType.LOWERCASE,
                        toneType: HanyuPinyinToneType = HanyuPinyinToneType.WITHOUT_TONE,
                        vCharType: HanyuPinyinVCharType = HanyuPinyinVCharType.WITH_V): String = {
val tmp = if(stripNoChineseCharacter) strip(chineseString) else chineseString
val format = getFormatInstance(caseType, toneType, vCharType)
val result = StringBuilder.newBuilder
val words = tmp.toCharArray
words.foreach { (x: Char) =>
  if (x > 128) result.append(PinyinHelper.toHanyuPinyinStringArray(x, format)(0)) else result.append(x)
}
result.toString()
}

private def getFormatInstance(caseType: HanyuPinyinCaseType = HanyuPinyinCaseType.LOWERCASE,
                            toneType: HanyuPinyinToneType = HanyuPinyinToneType.WITHOUT_TONE,
                            vCharType: HanyuPinyinVCharType = HanyuPinyinVCharType.WITH_V): HanyuPinyinOutputFormat = {
val format = new HanyuPinyinOutputFormat
format.setCaseType(caseType)
format.setToneType(toneType)
format.setVCharType(vCharType)
format
}

//移除字符串中的非中文字符
private def strip(arg: String): String = {
if(arg ==null) throw  new NullPointerException
val regex = "[^\\u4e00-\\u9fa5]+"
val tmp = arg.replaceAll(regex, "")
if(tmp.length ==0) throw new IllegalArgumentException
tmp
}
}

測試代碼:

package com.cyclone
import org.junit.Test
class InitialTest {

@Test
def init():Unit = {
val str = "中華 @ $人名綠*樹"
import com.cyclone.Initials.{chineseString2Initials,chineseString2Letters}
println(chineseString2Letters(str))
println(chineseString2Initials(str))
}
}

測試結果:


image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末毡熏,一起剝皮案震驚了整個濱河市蜂怎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖搭儒,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咨演,死亡現(xiàn)場離奇詭異癣籽,居然都是意外死亡隘竭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門建蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌更,“玉大人,你說我怎么就攤上這事洞慎⊥吹ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵劲腿,是天一觀的道長旭绒。 經常有香客問我,道長焦人,這世上最難降的妖魔是什么挥吵? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮花椭,結果婚禮上忽匈,老公的妹妹穿的比我還像新娘。我一直安慰自己矿辽,他們只是感情好丹允,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布郭厌。 她就那樣靜靜地躺著,像睡著了一般雕蔽。 火紅的嫁衣襯著肌膚如雪折柠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天批狐,我揣著相機與錄音扇售,去河邊找鬼。 笑死嚣艇,一個胖子當著我的面吹牛承冰,可吹牛的內容都是我干的。 我是一名探鬼主播髓废,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼该抒!你這毒婦竟也來了慌洪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凑保,失蹤者是張志新(化名)和其女友劉穎冈爹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欧引,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡频伤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芝此。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憋肖。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婚苹,靈堂內的尸體忽然破棺而出岸更,到底是詐尸還是另有隱情,我是刑警寧澤膊升,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布怎炊,位于F島的核電站,受9級特大地震影響廓译,放射性物質發(fā)生泄漏评肆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一非区、第九天 我趴在偏房一處隱蔽的房頂上張望瓜挽。 院中可真熱鬧,春花似錦征绸、人聲如沸秸抚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥汤。三九已至颠放,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吭敢,已是汗流浹背碰凶。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹿驼,地道東北人欲低。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像畜晰,于是被迫代替她去往敵國和親砾莱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容