Ciel's blog

Hi, this is Ciel!

题目

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题

调用自带函数

StringBufferreplace函数与String的不同,所以需要先将StringBuffer转化为String

1
2
3
4
5
6
public class Solution {
public String replaceSpace(StringBuffer str) {
// 注意这里toString和String的replace方法都会生成重新String
return str.toString().replace(" ", "%20");
}
}

创建新的数组存

当遇到 “ “,就追加 “%20”,否则遇到什么追加什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
if(c == ' '){
sb.append("%20");
}else{
sb.append(c);
}
}
return sb.toString();
}
}

在原来字符串上替换

先计算出空格数量,即为要拓展的字符数量。

然后遍历字符串,当遇到空格时替换。(使用从后向前替换的方法,这样移动的字符数要少一些。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Solution {
public String replaceSpace(StringBuffer str) {
int spacenum = 0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' ')
spacenum++;
}
int indexold = str.length()-1;
int newlength = str.length() + spacenum*2;
int indexnew = newlength-1;
str.setLength(newlength);
for(;indexold>=0;indexold--){
// 已经替换所有空格后,退出循环
if (spacenum==0){
break;
}
if(str.charAt(indexold) == ' '){
str.setCharAt(indexnew--, '0');
str.setCharAt(indexnew--, '2');
str.setCharAt(indexnew--, '%');
spacenum--;
}else{
str.setCharAt(indexnew--, str.charAt(indexold));
}
}
return str.toString();
}
}

总结

  1. String, StringBuilder&StringBuffer

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,返回的是缓存区本身。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// StringBuffer:
// 使用给定 String 中的字符替换此序列的子字符串中的字符。
replace(int start, int end, String str)
// 返回此序列中数据的字符串表示形式。
String toString()
// 返回指定索引处的 char 值。
char charAt(int index)
// 设置字符序列的长度。
void setLength(int newLength)


// String:
//返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(char oldChar, char newChar)
// 返回指定索引处的 char 值。
char charAt(int index)
  1. 要注意内存覆盖的问题。一般从后往前插入比从前往后需要移动的字符更少。
  2. 相关题目:有两个排序的数组Al 和A2 ,内存在Al 的末尾有足够多的空余空间容纳A2。 请实现一个函数,把A2 中的所有数字插入到A l 中并且所有的数字是排序的。

references

Java StringBuffer 和 StringBuilder 类

牛客网讨论与题解

《剑指offer》

用coding虽然国内访问很快,也没有屏蔽百度的爬虫,但是有时候感觉不是很稳定,所以参考网上的教程做了GitHub&Coding的双重部署,并绑定到同一个域名。将从国外的访问解析到Github,国内的访问解析到coding,这样就两全其美啦!

以下记录以下大致步骤以及过程中遇到的一些问题:

Step1 - 前期工作

此时应该以及有Hexo博客,并在GitHub&Coding建立好项目,加入SSH密钥。

Step 2 - 配置文件

为了部署到两个不同的地方,修改_config.yml文件的deploy如下

1
2
3
4
5
6
deploy:
type: git
repo:
github: git@github.com:ciel07yxh/ciel07yxh.github.io.git
coding: git@e.coding.net:ciel07yxh/ciel07yxh.coding.me.git
branch: master
  • 注意要区分空格和TAB键,这里是用的空格。

同时要修改文件中的url为自己要绑定的域名

1
url: http://ciel07yxh.top/

Step 3 - 添加文件

双重部署需要在source目录下新建一个Staticfiel文件,如下:

image-20200227143850293

而部署Github则需要子啊根目录下添加一个CNAME文件,如下:

image-20200227144032857

并写入自己要绑定的域名。

Step 4 - 绑定域名

之前在Uniregistry上买的域名,好像不能设置不同的访问用不同的DNS解析,所以参照其他教程在阿里云上另外买了域名,几块钱,配置如下:

image-20200227144240050

配置的时候遇到的问题是DNS状态异常,弄了半天也没弄好,

image-20200227144643750

于是重新买了一个域名,最开始也是异常,等大概5分钟就正常了。

GitHub&Coding的绑定就很简单啦,Coding的配置可以见我的上一篇博客

前记

本篇持续更新,总结一些常见的美音发音规则:)

由于喜欢看美剧的原因,渐渐发现自己的口音比较偏美式发音了,所以决定好好总结一下美式发音的一些规则以及美国人的说话习惯等,希望自己的美语能够更地道一些,同时也提高自己对不是那么字正腔圆的英语的听力水平。

虽然语言的关键在于交流,但是口音真的能够帮助你给别人一个好的第一印象,让别人更愿意和自己交流下去,同时也给自己自信。

特别推荐:

  1. 微博博主“英语老炮儿马思瑞”!从他的视频里学到了很多。他有开相关的课程。这里的总结也大多来自他的视频。
  2. 开言英语(OpenLanguage),微信上有音频和对应文本,我一般喜欢在喜马拉雅上听(名字是:潘吉Jenny告诉你)

简述

英文的音素(phoneme)被认为有39-47个不等,大多数认为有44个。

The English language was influenced by several different languages in different stages of its development. It began as Germanic-base language, and was later influenced by Latin, Greek, and most importantly, French.

音标

元音vowels

长元音: [i:]、[ɔ:]、[u:]、[ə:]、[ɑ:]

短元音:[ɔ]、[u]、[ə]、[ʌ]、[e]、[æ]、[i]

双元音:[ei]、[ai]、[ɔi]、[iə]、[ɛə]、[uə]、[au] 、[əu]

辅音consonants

清辅音:[p]、[t]、[k]、[f]、[θ]、[s]、[ʃ]、[h]、[tr]、[ts]、[tʃ]

浊辅音:[b] 、[d]、[g]、[v]、[ð]、[z]、[ʒ]、[r]、[dr]、[dz]、[dʒ]

鼻音:[m]、[n]、[ŋ]

半元音:[j]、[w]

边音:[l]

由于打不出来,*/?/*代替不知名符号符号(老马视频里看到的这个符号,以前从来没见过哈哈哈)

美式发音规则

以下规则不是必须的,有的只是一些人群的发音习惯。了解只是为了能听懂别人说的话。

规则有:弱读, 省音/吞音, 同化…

(待补充)


  1. t的发音:
  • “-sten”, “-ften”, “-stle”: silent t

  • often 由于历史原因,最早在1700年t发音,然后t不发音,现在又发音,所以t可以发音可不发音。

  • ”-stl“, “-ftl”: pronounce t

  1. I was a good kid.

…was a… /aəzə/

  1. That’s it.

/ðæsi?/

  1. 一般功能词(介词,代词,冠词等等)说得很轻,重要得词发高平调(类似中文的一声)。

…probably because of… –> prolly cuzuv (pro ba bly be cause of –> pro lly cu zuv)

  1. important 的发音

/im’ pɔr |t tənt / or /im’ pɔr |t tən |t / , /|t/表示是一个stop t, 不用发出来。

三音节词,遵守”da-DA-da“的音调。

美式地道表达

  1. What about…? …呢?

  2. …some sh**t like that. = …some thing like that.(表示不太确定)

sh**t在口语中也可以表示东西/事情

  1. 缀词用I mean/you know…代替Uh/Um/Like…(让你听起来不太聪明)

  2. That’s not happening. 这不可能发生

  3. bad seed 坏孩子

  4. I/He/She was like… 描述自己/他人的心里活动

  5. back then 那个时候

  6. If I woulda knew = If I would have known = If I had known (虚拟语气)其实是一个错误,但是母语者常说。写作中必须是If I had known

  7. fun意思是’好玩‘而不是’有趣‘,多用于形容事件

    正确用法:This trip was really fun.

    错误用法:This book is really fun.

  8. outfit 一身打扮

  9. iI’m excited./ I’m excited for + n./ I’m excited to do something.

  10. *be born and raised in + someplace

  11. give someone a compliment/ to compliment somebody赞扬某人

    praise多用于表扬(孩子),崇拜(宗教)

  12. end up doing something

  13. holiday在英语里一般特殊指the holiday season,是感恩节到元旦之间的大概五六个星期

英音与美音的区别

历史

美国英语是英国英语的一种区域语言变体, 它起源于17~18世纪的英国英语。

英国在北美地区曾先后建立了13个殖民地, 同时英国殖民者也把莎士比亚(Shakespeare)和弥尔顿

(Milton)的英语带到了美洲。

诺亚•韦伯斯特(Noah Webster)首创“American English ”1828年, 出版《美语词典》(American Dictionary of English Language)从而开启了韦氏词典的历史,进而开启了美式英语的历史。

自2001年起已有法定标准,但两者均有占据统治地位的相对标准,分别以BBC和VOA为代表,而这两个标准又分别被称为Received Pronunciation(英语公认标准)和 General American(美语普通话),在专业著述中常使用其缩写RP和GA。

规律

  • 英国人将字母a读[a:]而美国人则读作[æ]

  • 英国人将字母o读作[ɔ],而美国人则将o读作近似[a:]音的[a]

  • u和ue英国人发[ju:], 而美国人则发[u:]

due <RP>[dju:] <GA>[du:]

  • 对于辅音,RP清晰,GA含混,d和t在美音中/t/发音与/d/相近。美音中/t/ 出现在两个元音之间且处于非重读位置的时候,发音近似/d/
  • R出cc现在元音后—美音卷舌

worker <RP>/‘wə:kə/ <GA>/’wərkər/

  • RP习惯把单词的主重音放在诸音节靠后的音节上,而GA则喜欢把主重音放在前面的音节上。在许多以-ary,-ory结尾的单词和以-ate结尾的双音节词中,RP把主重音放在第二个音节上,而GA则把重音放在第一音节上。

<RP>laˊbocccratory <GA>ˊlaboratory

<RP>dicˊtate <GA>ˊdictate

<RP>miˊgrate <GA>ˊmigrate

  • 英式英语习惯将单词略读,美式英语则习惯把每个音节全部读出
  • 有一些词英式英语和美式英语发音完全不同

leisure <RP>/‘leз∂/ <GA>/‘li:z∂r/

  • 语气:美国人说话相对比较稳重低沉,句势通常呈降调,并且速度慢一些 英国人的语气抑扬顿挫,语调高亢。
  • 美英发音比较靠口腔后部,英音比较靠前,舌头稍微平一些。

其他

  1. African American Vernacular English(AAVE) 非裔美国人方言英语:
  • 降调比较重
  • I /ai/发音为/a/
  1. 英语中双重否定还是表示否定。

    这是非标准的用法,常见于一些地区或AAVE中。

references

口语老炮儿马思瑞weibo

英语口语与语音入门系列讲座

bilbili视频:

英语单词中的”T”何时不发音?often, listen, castle. (中英字幕)

【美语发音】学important吞音,说话瞬间像老美了!

0%