Java码界探秘 Java码界探秘
首页
  • 基础

    • 对象的概念
    • 万物皆对象
    • 控制流
    • 初始化和垃圾回收
    • 封装
    • 复用
    • 多态
    • 接口
    • 内部类
    • 集合
  • 高级

    • 函数式编程
    • 流式编程
    • 异常
    • 代码校验
    • 文件
    • 字符串
    • 类型信息
    • 泛型
    • 数组
    • 枚举
    • 注解
    • 并发编程
    • 设计模式
  • 扩展

    • 编程指南
    • 文档注释
    • 对象传递和返回
    • 流式 IO
    • New IO
    • 理解 equals 和 hashCode 方法
    • 关于集合
    • 并发底层原理
    • 数据压缩
    • 对象序列号
    • C++ 和 Java 的优良传统
  • 基础

    • Netty源码解析
    • Netty概述
    • Netty中的buffer
    • Channel中的Pipeline
    • Netty与Reactor模式
    • Netty中的Handler
    • Netty中的HashedWheelTimer
    • Netty中的Channel(下)
    • Netty中的异步
  • 高级

    • Recycler对象池分析
    • FastThreadLocal源码解析
    • SocketChannel 读取ByteBuf 的过程
    • Netty 内存池分析
    • Netty如何实现高性能内存管理
    • 线程池EventLoopGroup源码分析
    • Netty实例构建一个socks proxy
    • Netty4.x用户指南
    • Netty4和Netty3对比
    • Netty3.2用户指南
    • 3.2 ChannelEvent (opens new window)
    • Netty3.x源码解析
    • 4.x DefaultPromise (opens new window)
  • 基础教程

    • Hello, World!
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
    • 捕捉信号命令
    • 文件测试
    • 管道
    • 输入输出
    • Sed命令介绍
    • Sftp命令介绍
  • 知行:技术人的管理之路(脑图)
  • 软件开发中团队首领的好坏之分
  • 制定规划的策略
  • 打造最佳开发团队的几点建议
  • 给老板汇报技术规划的一些要点
  • 技术的价值怎么在非技术领导心里提现出来?
  • 性格内向,不善言辞的人能做管理吗?
  • 研发管理:与员工一对一交流的执行与反思
首页
  • 基础

    • 对象的概念
    • 万物皆对象
    • 控制流
    • 初始化和垃圾回收
    • 封装
    • 复用
    • 多态
    • 接口
    • 内部类
    • 集合
  • 高级

    • 函数式编程
    • 流式编程
    • 异常
    • 代码校验
    • 文件
    • 字符串
    • 类型信息
    • 泛型
    • 数组
    • 枚举
    • 注解
    • 并发编程
    • 设计模式
  • 扩展

    • 编程指南
    • 文档注释
    • 对象传递和返回
    • 流式 IO
    • New IO
    • 理解 equals 和 hashCode 方法
    • 关于集合
    • 并发底层原理
    • 数据压缩
    • 对象序列号
    • C++ 和 Java 的优良传统
  • 基础

    • Netty源码解析
    • Netty概述
    • Netty中的buffer
    • Channel中的Pipeline
    • Netty与Reactor模式
    • Netty中的Handler
    • Netty中的HashedWheelTimer
    • Netty中的Channel(下)
    • Netty中的异步
  • 高级

    • Recycler对象池分析
    • FastThreadLocal源码解析
    • SocketChannel 读取ByteBuf 的过程
    • Netty 内存池分析
    • Netty如何实现高性能内存管理
    • 线程池EventLoopGroup源码分析
    • Netty实例构建一个socks proxy
    • Netty4.x用户指南
    • Netty4和Netty3对比
    • Netty3.2用户指南
    • 3.2 ChannelEvent (opens new window)
    • Netty3.x源码解析
    • 4.x DefaultPromise (opens new window)
  • 基础教程

    • Hello, World!
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
    • 捕捉信号命令
    • 文件测试
    • 管道
    • 输入输出
    • Sed命令介绍
    • Sftp命令介绍
  • 知行:技术人的管理之路(脑图)
  • 软件开发中团队首领的好坏之分
  • 制定规划的策略
  • 打造最佳开发团队的几点建议
  • 给老板汇报技术规划的一些要点
  • 技术的价值怎么在非技术领导心里提现出来?
  • 性格内向,不善言辞的人能做管理吗?
  • 研发管理:与员工一对一交流的执行与反思
  • 基础教程

    • Hello World
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
      • Tutorial
        • 字符串长度
        • 索引
        • 子串提取
        • 简单数据提取示例:
        • 子串替换
      • Exercise
      • Tutorial Code
      • Expected Output
      • Solution
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
    • 捕捉信号命令
    • 文件测试
    • 管道
    • 输入输出
    • Sed命令介绍
    • Sftp命令介绍
  • Shell教程
  • 基础教程
daichangya
2024-05-10
目录

基础字符串操作

# Tutorial

Shell允许一些常见的字符串操作,这对于脚本编写非常有用。

# 字符串长度

#       1234567890123456
STRING="this is a string"
echo ${#STRING}            # 16

# 索引

在$SUBSTRING中找到匹配的任何单个字符的$STRING中找到数字位置。注意,在这种情况下使用“ expr”命令。

STRING="this is a string"
SUBSTRING="hat"
expr index "$STRING" "$SUBSTRING"     # 1 is the position of the first 't' in $STRING

# 子串提取

从$STRING开始,在位置$POS之后提取长度$LEN的子字符串。请注意,第一个位置是0。

STRING="this is a string"
POS=1
LEN=3
echo ${STRING:$POS:$LEN}   # his

如果省略:$LEN,则将$POS的子字符串提取到行尾

STRING="this is a string"
echo ${STRING:1}           # $STRING contents without leading character
echo ${STRING:12}          # ring

# 简单数据提取示例:

# Code to extract the First name from the data record
DATARECORD="last=Clifford,first=Johnny Boy,state=CA"
COMMA1=`expr index "$DATARECORD" ','`  # 14 position of first comma
CHOP1FIELD=${DATARECORD:$COMMA1}       #
COMMA2=`expr index "$CHOP1FIELD" ','`
LENGTH=`expr $COMMA2 - 6 - 1`
FIRSTNAME=${CHOP1FIELD:6:$LENGTH}      # Johnny Boy
echo $FIRSTNAME

# 子串替换

STRING="to be or not to be"

用替换替换第一次出现的子字符串

STRING="to be or not to be"
echo ${STRING[@]/be/eat}        # to eat or not to be

替换所有出现的子串

STRING="to be or not to be"
echo ${STRING[@]//be/eat}        # to eat or not to eat

删除所有出现的子字符串(替换为空字符串)

STRING="to be or not to be"
echo ${STRING[@]// not/}        # to be or to be

如果在$STRING开头替换子字符串的出现

STRING="to be or not to be"
echo ${STRING[@]/#to be/eat now}    # eat now or not to be

如果在$STRING结尾,则替换子字符串的出现

STRING="to be or not to be"
echo ${STRING[@]/%be/eat}        # to be or not to eat

用shell命令输出替换出现的子字符串

STRING="to be or not to be"
echo ${STRING[@]/%be/be on $(date +%Y-%m-%d)}    # to be or not to be on 2012-06-14

# Exercise

在此练习中,您将需要更改沃伦·巴菲特的名言。首先创建一个变量ISAY并为其分配原始值。然后使用字符串操作并按照定义的4个更改将其重新分配为新的更改值:

  • 变更1:将“snow”的第一个出现替换为“foot”。
  • 变更2:删除第二次出现的“snow”。
  • 变更3:将“finding”替换为“getting”。
  • 更改4:删除“wet”之后的所有字符。提示:一种实现Change4的方法是,如果要在单词'wet'中找到'w'的索引,然后使用子字符串提取。

# Tutorial Code

#!/bin/bash
BUFFETT="Life is like a snowball. The important thing is finding wet snow and a really long hill."
# write your code here
ISAY=
ISAY=

# Test code - do not modify

echo "Warren Buffett said:"
echo $BUFFETT
echo "and I say:"
echo $ISAY

# Expected Output

沃伦·巴菲特(Warren Buffett)说: Life is like a snowball. The important thing is finding wet snow and a really long hill. and I say: Life is like a football. The important thing is getting wet

# Solution

#!/bin/bash
BUFFETT="Life is like a snowball. The important thing is finding wet snow and a really long hill."
# write your code here
ISAY=$BUFFETT
change1=${ISAY[@]/snow/foot}
change2=${change1[@]//snow/}
change3=${change2[@]/finding/getting}
loc=`expr index "$change3" 'w'`
ISAY=${change3::$loc+2}

# Test code - do not modify

echo "Warren Buffett said:"
echo $BUFFETT
echo "and I say:"
echo "$ISAY"
上次更新: 2024/05/11, 17:55:08
基础运算符
逻辑表达式

← 基础运算符 逻辑表达式→

Theme by Vdoing | Copyright © 2019-2024 daichangya | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式