有限状态机的一个实现

华为海思IC前端中后端(COT&XPU)岗位笔试机考题 华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享 阅读详情
java论坛接了一道题目:
简化文字串
* String TrimSentence( String src )
将原串src中的所有多余空白符(空格,tab,回车等)去掉后,结果就在目标串dst中;引号中的空白符不能去掉,并要考虑引号中的转义字符;两个单词数字之间的多个空白符变成1个空格,单词与符号之间的空白符去掉;假定写入字符的空间已由调用者分配足够。
如
SELECT /r/n a1, " /"a bc /t"    as   a2/r FROM   c/rWHERE (  a3 = 5   AND a2>1 )
应变成
SELECT a1," /"a bc /t"as a2 FROM c WHERE(a3=5 AND a2>1)

仔细审题的话会发现,其实题目本身还是有点小问题,就是状态不明。但是关系不大,并不太影响解题。

有限自动机的实现并不复杂,但是要写出效率高,易读的程序也不太容易。

public class TrimSentence {
    
final static char[] charsTrim = {
'/n', '/b', '/r', '/f', '/'', '/"' };
    
final static char[] charsTrimC = {
'n', 'b', 'r', 'f', '/'', '/"' };

    
final static char space = ' ';
    
final static char slash = '/';
    
final static char quotation = '"';

    
public static void main(String[] args) {

        String str 
= "SELECT   a1, " /"a bc /t"     as   a2  FROM   c WHERE (  a3 = 5   AND a2>1 ) ";

        System.out.println(trimSentence(str));

    }


    
public static String trimSentence(String str) {
        StringBuffer sb 
= new StringBuffer();
        
char[] charsSrc = new char[str.length()];
        str.getChars(
0, str.length(), charsSrc, 0);
        
boolean spaceFlg = false;
        
boolean slashFlg = false;
        
boolean quotationFlg = false;

        
for (int i = 0; i  < charsSrc.length; i++) {
            
char ch1 = charsSrc[i];
            
switch (charsSrc[i]) {
            
case slash:
                slashFlg 
= true;
                spaceFlg 
= false;
                
if (quotationFlg)
                    sb.append(slash);
                
break;
            
case quotation:
                
if (!slashFlg) {
                    quotationFlg 
= !quotationFlg;
                }

                
if (isSpaceDelete(sb, charsSrc[i]))
                    sb.deleteCharAt(sb.length() 
- 1);
                sb.append(charsSrc[i]);
                slashFlg 
= false;
                spaceFlg 
= false;
                
break;

            
case space:
                
if (!spaceFlg) {
                    sb.append(charsSrc[i]);
                    spaceFlg 
= true;
                }

                
break;

            
default:
                
if (quotationFlg) {
                    
if (isCharsTrim(charsSrc[i])) {
                        sb.append(slash);
                        sb.append(getConveredChar(charsSrc[i]));
                    }
 else
                        sb.append(charsSrc[i]);
                }
 else if (isCharsTrim(charsSrc[i])) {
                    charsSrc[i] 
= space;
                    i
--;
                    
continue;
                }
 else {
                    
if (isSpaceDelete(sb, charsSrc[i]))
                        sb.deleteCharAt(sb.length() 
- 1);
                    sb.append(charsSrc[i]);
                }

                slashFlg 
= false;
                spaceFlg 
= false;
                
break;
            }

        }


        
return sb.toString();
    }


    
private static boolean isCharsTrim(char ch) {
        
for (int i = 0; i  < charsTrim.length; i++)
            
if (ch == charsTrim[i])
                
return true;
        
return false;
    }


    
private static char getConveredChar(char ch) {
        
int i;
        
for (i = 0; i  < charsTrim.length; i++)
            
if (ch == charsTrim[i])
                
return charsTrimC[i];
        
return ch;
    }


    
private static boolean isSpaceDelete(StringBuffer sb, char ch) {
        
if (sb.length()  <= 1)
            
return false;
        
if (sb.charAt(sb.length() - 1) != space)
            
return false;
        
return !((Character.isLetter(sb.charAt(sb.length() - 2))  ¦ ¦ Character
                .isDigit(sb.charAt(sb.length() 
- 2))) && (Character
                .isLetter(ch)  ¦ ¦ Character.isDigit(ch)));
    }


}

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾 本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。 阅读详情

相关推荐

华为P812E光猫补全shell配置PON口模式

终于看到华为企业级的带2.5电口P812E横空出世了,相信很多发烧友也已经将此收入昂中。相信体验的同时,遇到的第一件事情就是配置PON口模式的问题,本文将带发烧基友解锁模式。

GUAIYU的博客 5731

C 语言实现简单有限状态机

常说的状态机是有限状态机 FSM,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。状态总数(state)是有限的。任一时刻,只处在一种状态之中。某种条件下,会从一种状态转变(transition)到另一种状态。设计状态机的关键点:当前状态、外部输入、下一个状态。

优快云我告诉你 3161

Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解

本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。

pytorchlight8的博客 1195

有限状态机的实现

作者:zhanhailiang 日期:2015-01-24 什么是有限状态机 一个有限状态机是一个设备,或是一个设备模型,具有有限数量的状态,它可以在任何给定的时间根 据输入进行操作,使其从一个状态变换到另一个状态,或者是促使一个输出或者一种行为的发生。一 个有限状态机在任何瞬间只能处在一个状态。 即有限状态机背后的概念是要把一个对象的行为分解成为易于处理的“块”或状态

香巴拉 2057

Containerd容器运行时的私有仓库镜像推送push和镜像拉取问题解决

向/etc/containerd/config.toml配置添加如下配置,然后重启containerd。向/etc/containerd/config.toml配置添加如下配置,然后重启containerd。通过crictl为k8s拉取镜像如下所示。可以通过ctr命令进行镜像推送。往私有仓库推送镜像如下。

Bulut0907 1万+

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

有限状态机(FSM)golang的实现

有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”...

weixin_42117918的博客 4249

Origin 2025b中文版安装全指南:避开乱码、水印与崩溃陷阱

Origin作为科研绘图领域的事实标准,其2025b版本首次官方支持简体中文UI,但安装远非‘下一步’即可完成。核心在于理解软件本体、语言包、许可证服务与系统区域设置四者间的耦合关系——尤其Windows非Unicode程序语言必须设为‘中文(简体,中国)’,否则必然触发坐标轴乱码、PDF文字方块等典型故障;而AI辅助拟合、内置Python 3.11等新特性,又依赖正确的字体链(如SimSun)与注册表强制加载(UILanguage=zh-CN)才能稳定启用。该版本广泛应用于材料科学、电化学、XRD/SEM

weixin_42548874的博客 1409

有限状态机(FSM)初探

NIST 对有限状态机(Finite State Machine, FSM)的定义如下。      包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有

成都心情 4313

虚拟网络的“隐形盾”:C#如何用代码把DDoS踢出门?

本文分享了如何用C#防御DDoS攻击的实战经验。通过三种核心防御策略:1)基于IP的速率限制中间件,使用滑动时间窗口算法控制请求流量;2)自动IP封禁服务,通过特征检测识别恶意IP并加入黑名单;3)优化数据库连接池和HTTP客户端连接池,合理配置资源参数。文中提供了详细的C#代码实现,包括限流中间件、IP封禁服务和连接池优化方案,并分享了生产环境中的调优经验,如配合Redis实现分布式限流、使用fail2ban自动封禁等技巧,帮助开发者构建更健壮的防御体系。

墨夶的博客 329

OpenClaw-遇到的问题- FailoverError: Model context window too small (4096 tokens). Minimum is 16000

摘要:OpenClaw配置文件中deepseek-reasoner模型的上下文窗口被默认设置为4096 tokens(实际支持128K),导致系统报错"Model context window too small"。解决方案是删除配置文件中的contextWindow和maxTokens字段,让系统自动获取模型真实能力,并重启OpenClaw服务。配置文件通常位于用户目录下的.openclaw/openclaw.json中。

直到世界的尽头 4163

javascript实现有限状态机

1、状态机描述 简单说,有限状态机是一种模型,模型都用来模拟事物,能够被有限状态机这种模型模拟的事物,一般都有以下特点: 1)可以用状态来描述事物,并且任一时刻,事物总是处于一种状态; 2)事物拥有的状态总数是有限的; 3)通过触发事物的某些行为,可以导致事物从一种状态过渡到另一种状态; 4)事物状态变化是有规则的,A状态可以变换到B,B可以变换到C,A却不一定能变换到C; ...

weixin_30664539的博客 350

6、业务影响分析(BIA)的数据收集与关键指标评估

本文全面解析了业务影响分析(BIA)的核心内容,包括数据收集、业务流程分析、信息系统与资产清单、人员与供应商依赖、影响声明、关键指标评估(如MTD、RTO、RPO)、威胁建模与风险分析等。通过详细的介绍和图表展示,帮助组织系统性地制定灾难恢复计划,以应对各种潜在风险,确保关键业务流程在灾难发生后能够快速恢复并持续运营。

moss5的博客 374

TypeScript实现一个有限状态机

开放封闭原则: 开发过程中,因为变化、升级和维护等原因需要对原有逻辑进行修改时,很有可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有功能新测试。 我们应该尽量通过扩展实体的行为来实现变化,而不是通过修改已有的代码来实现变化 具体一点呢 —— 类、模块和函数应该对扩展开放,对修改关闭。模块应该尽量在不修改原代码的情况下进行扩展。 核心 —— 用抽象构建框架,用实现扩展细节。 总结一下 —— 开发人员应该对程序中呈现的频繁变化的那些部分作出抽象,然后从抽象派生的实现类来

qq_40648045的博客 1669

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一个有限状态机的C++实现

女主宣言有限状态机:表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。它对数字系统的设计具有十分重要的作用。常见的计算机就是使用有限状态机作为计算模型的;电脑...

HULK一线技术杂谈 1488

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# x Unity 实现一个简单的有限状态机(旧版)

嘻嘻

咩咩的博客 1396

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何实现一个简单的FSM有限状态机

在游戏开发中,有限状态机(Finite State Machine,FSM)是一种强大的设计模式,用于描述对象在不同状态下的行为以及状态之间的转换,对于有限的状态,每个状态有自己独立的实现逻辑和过渡逻辑,每个状态可以切换至零-多个状态。通过描述对象在不同状态下的行为以及状态之间的转换,为游戏开发者提供了一种清晰而有效的方式来管理复杂的游戏逻辑。有限状态机是一种数学模型,用于描述一个系统在不同状态之间的转换。在游戏开发中,这个系统可以是任何具有多种行为的实体,比如角色、敌人、NPC等。

weixin_51186493的博客 1245

使用Asyncio的Coroutine来实现一个有限状态机

如图: #!/usr/bin/env python # -*- coding: utf-8 -*- import asyncio import datetime import time from random import randint @asyncio.coroutine def StartState(): print("Start...

weixin_33688840的博客 111

Unity 中用有限状态机来实现一个 AI之美

最近在阅读《游戏人工智能编程案例精粹(修订版)》,本文是书中第二章的一篇笔记。 有限状态机(英语:Finite-state machine, 缩写:FSM),是一个被数学家用来解决问题的严格形式化的设备,在游戏业中也常见有限状态机的身影。 对于游戏程序员来说,可以用下面这个定义来了解: 一个有限状态机是一个设备(device),或是一个设备模型(a model of a device)。具有...

游戏开发、游戏引擎开发、逆向破解爱好者 1160

FSM——Unity中一个简易的有限状态机的实现

有限状态机是一种在实现敌人Ai上比较常用的方法,一个最基本的有限状态机可以由三部分组成:1.状态基类2.状态类3.载体类(敌人类、玩家类等等)

m0_51007980的博客 1380

Unity 中用有限状态机来实现一个 AI

最近在阅读《游戏人工智能编程案例精粹(修订版)》,本文是书中第二章的一篇笔记。 有限状态机(英语:Finite-state machine, 缩写:FSM),是一个被数学家用来解决问题的严格形式化的设备,在游戏业中也常见有限状态机的身影。 对于游戏程序员来说,可以用下面这个定义来了解: 一个有限状态机是一个设备(device),或是一个设...

weixin_33811961的博客 1259

用有限状态机实现一个简版html解析器

FSM(Finite State Machines) 有限状态机,也叫有限状态自动机,是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型,它拥有有限个数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态机有什么用代码编译器在工作时就需要通过词法分析、语法分析、语义分析来得到 AST(Abtract Syntaxt Tree) 抽象语法树。需要先词法分析拿...

cafehaus的博客 1155

Verilog十日谈 Day 6:实战:用有限状态机实现一个序列检测器

《Verilog十日谈》状态机设计指南:本文系统介绍了有限状态机(FSM)的设计方法,通过1011序列检测器案例详细展示了从需求分析到代码实现的完整流程。重点讲解了三段式状态机模板(状态寄存器、次态逻辑、输出逻辑)、摩尔型与米利型的区别、状态编码策略(二进制/独热/格雷码)选择,以及验证策略。采用独热码实现的状态机代码清晰展示了各状态转移逻辑,配套的测试平台验证了序列检测功能。本文为数字设计中的状态机实现提供了实用指导。

xiakunpei123的博客 1196

在Unity里实现一个有限状态机(2)

状态管理类 有限状态机用来管理状态,在某一时刻只能处于一个状态 public class Fsm { //下面是当前状态的信息 private StateID currentStateId; public StateID CurrentStateId { get { return currentStateId; } } private FsmState currentState; public FsmState CurrentState { get { retu

jjegoing的博客 2725
上一篇: 商店购物
下一篇: ECPP——利用有限域上的椭圆曲线,精确判定素数的算法
chen09
博客等级 码龄19年 158粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值