Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >编写一个函数来检查字符串是否符合十六进制表示法

编写一个函数来检查字符串是否符合十六进制表示法
EN

Stack Overflow用户
提问于 2018-10-28 23:44:39
回答 3查看 148关注 0票数 0

我想写一个输出"TRUE“或"FALSE”的函数,这取决于输入是否对应于颜色的十六进制表示法。

我是一个R(和编码)的初学者,并且想出了一个基本的、不优雅的、冗长的代码想法(这不起作用……)。在几个单词中,使用strslipt(向量,split="")拆分字符串向量,然后在for循环中连续检查每个组件是否大于9或对应于不同于字母表前六个字母的字母。

代码语言:javascript
代码运行次数:0
复制
ab <- strsplit(a, split="")
ab[[1]][1]

for(i in 2:nchar(a)) {
if(!is.character(a)) {
stop("invalid input; a string expectef")
}
if (ab[[1]][1] != '#') {
c <- 'FALSE' 
}
if (ab[[1]][1] > '10') {
c <-  'FALSE'
}
if (ab[[1]][i] != 'A') {
c <- 'FALSE' 
}
if (ab[[1]][i] != 'a') {
c <- 'FALSE'
}
if (ab[[1]][i] != 'B') {
c <- 'FALSE'  
}
if (ab[[1]][i] != 'b') {
c <- 'FALSE'
}
if (ab[[1]][i] != 'C') {
c <- 'FALSE' 
}
if (ab[[1]][i] != 'c') {
c <- 'FALSE'
}
if (ab[[1]][i] != 'D') {
c <- 'FALSE'  
}
if (ab[[1]][i] != 'd') {
  c <- 'FALSE' 
 }
if (ab[[1]][i] != 'E') {
c <- 'FALSE'
}
if (ab[[1]][i] != 'e') {
c <- 'FALSE')
}
if (ab[[1]][i] != 'F') {
c <- 'FALSE'  
}
if (ab[[1]][i] != 'f') {
c <- 'FALSE')
 }
 if(c != 'FALSE') {
  c <- 'TRUE'
  }
   return(c)
  }

非常感谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2018-10-29 02:29:36

您可以在grepl中使用正则表达式。首先是一个查找两位十六进制数的简单示例,以了解以下内容:

代码语言:javascript
代码运行次数:0
复制
x = c('#2A', '&33', '#e4', '#EG')
grepl('^#[0-9A-Fa-f]{2}$', x)
# [1]  TRUE FALSE  TRUE FALSE

它的工作原理:

  • ^表示模式必须位于字符串的开头。也就是说,在# are allowed
  • #匹配之前没有字符,所以这必须是第一个character
  • [0-9A-F-a-f]匹配0-9范围内的任何字符,A-F或a-f
  • {2}表示我们恰好需要2个这样的characters
  • $意味着该模式也必须在字符串的末尾-因此不允许额外的字符

R中的颜色字符串必须具有6位或8位十六进制数字,具体取决于它们是否包含alpha值。所以为了寻找这两种可能性,我们可以这样做

代码语言:javascript
代码运行次数:0
复制
grepl('^#[0-9A-Fa-f]{6}$', x) | grepl('^#[0-9A-Fa-f]{8}$', x)
票数 1
EN

Stack Overflow用户

发布于 2018-10-29 02:58:13

您可以使用以下命令:

代码语言:javascript
代码运行次数:0
复制
hexa <- "#FFFFFF"
output = !(is.na(strtoi(stringr::str_sub(hexa, 2), 16L)))
output
票数 0
EN

Stack Overflow用户

发布于 2018-10-30 18:28:56

非常感谢你的反馈。我想我基本上想出了一个更好的解决方案的开始,使用stringr()包。下面是我的代码:

代码语言:javascript
代码运行次数:0
复制
is_hex <- function(a= 'a sentence') {
 if(!is.character(a)) {
stop("invalid input; a string was expected")
}
 if (nchar(a) != '7') {
  return(as.logical("FALSE"))
 }
 if (substr(a, 1,1 ) != '#') {
  return(as.logical("FALSE"))
  }

   if (str_detect(a, pattern='[G-Z g-z]') == 'FALSE') {

    result <- as.logical("TRUE")
   }
   else {
    result <- as.logical("FALSE")
   }

    return(result)

  }

现在我面临的问题是:

代码语言:javascript
代码运行次数:0
复制
       if(!is.character(a)) {
       stop("invalid input; a string was expected")
        }

似乎不管用。事实上,如果我评估我的函数is_hex(a='TRUE'),那么我得到的是False,而不是预期的错误。

非常感谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53037077

复制
相关文章
一系列令人敬畏的.NET核心库,工具,框架和软件[通俗易懂]
原文地址:https://github.com/thangchung/awesome-dotnet-core
全栈程序员站长
2022/09/13
18.8K0
前后端分离项目模板
进入 demo-backend/src/main/resources 打开 application.yaml 文件修改数据源配置:
浪漫主义狗
2023/09/04
1880
前后端分离项目模板
Java 后端开发实践 - 项目模板
整理出一套公共性的项目模板,旨在尽量多地包含日常开发所需,减少开发者的重复性工作以及提供一些最佳实践。
芋道源码
2020/12/08
6480
Java 后端开发实践 - 项目模板
Blazor资源大全,很棒的Blazor(1)
Blazor允许您使用C#而不是JavaScript构建交互式Web用户界面。Blazor应用程序由使用C#、HTML和CSS实现的可重用的Web用户界面组件组成。客户端和服务器代码都是用C#编写的,允许您共享代码和库。 更多信息请参阅官方Blazor网站[22]。
用户10786849
2023/10/13
5660
Blazor资源大全,很棒的Blazor(1)
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
本文首发于《创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性》
Rector
2021/08/19
5.2K0
创建API服务最小只要4行代码!!!尝新体验ASP.NET Core 6预览版本中的最小Web API(minimal APIS)新特性
后端开发实践:Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足的地方,要么测试分类没有分好,要么基本的编码架子没有考虑周全。
Java团长
2019/07/19
1.6K0
后端开发实践:Spring Boot项目模板
React项目配置6(前后端分离如何控制用户权限)
本教程总共6篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React项目配置1(如何管理项目公共js方法)---2018.01.11 2、React项目配置2(自己封装Ajax)---2018.01.12 3、React项目配置3(如何管理项目API接口)---2018.01.15 4、React项目配置4(如何在开发时跨域获取api请求)---2018.01.16 5、React项目配置5(引入MockJs,实现假接口开发)---2018.01.17 6、R
前端人人
2018/04/11
1.6K0
Rainbond 中Vue、React项目如何调用后端接口
通常我们会在项目的全局配置文件.env.production中直接写入后端ip,例如:
曾庆国
2020/11/19
1.5K0
.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
一、前言 本篇开发环境? 1、操作系统:CentOS7(因为ken比较偏爱CentOS7) 2、SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识 1、了解如何通过Hyper-V安装CentOS虚拟机 2、了解CentOS7基础命令/常用命令 二、安装 .NET Core SDK 1、安装必要依赖 sudo yum -y install libunwind libicu 2、下载(SDK列表) cd /home/downloads curl -sSL -o dotnet-
KenTalk
2018/09/11
1.6K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一、前言 本篇开发环境? 1、操作系统: Windows 10 X64 2、SDK: .NET Core 2.0 Preview 二、安装 .NET Core SDK 1、下载 .NET Core 下载地址:https://www.microsoft.com/net/download/core 根据自己电脑情况选择对应版本即可 .NET CORE 2.0下载地址:https://aka.ms/dotnet-sdk-2.0.0-preview2-win-x64 2、安装 微软出品,一键安装,只需一步,看图
KenTalk
2018/09/11
1.6K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
后端开发实践系列——Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为“第0个迭代”要做的事情。但是,当项目运行了一段时间之后再来反观,我总会发现一些不足的地方,要么测试分类没有分好,要么基本的编码架子没有考虑周全。
好好学java
2019/12/05
4390
后端开发实践系列——Spring Boot项目模板
别了,JavaScript;你好,Blazor
Web开发与JavaScript开发向来是同义词。直到WebAssembly的横空出世,WebAssembly (Wasm)是一种在浏览器中可以执行的二进制指令。 WebAssembly 的 官方工具链 能够编译 C/C++ 代码,但许多社区也提供了不同语言的编译器,如 Rust,Python,Java 和 Blazor(C#)。特别是 Rust 社区非常活跃,可以开始看到完整的前端框架,如 Yew 和 Dodrio,这为基于浏览器的应用带来了更多新的可能性,只要测试一些使用 WebAssembly 构建的优秀应用,就可知道基于浏览器的近乎原生的应用现在已经成为现实,例如 Sketchup 或 Magnum。
张善友
2020/06/19
3.1K0
别了,JavaScript;你好,Blazor
ApiTemplate:.net后端项目模板完善与总结
ApiTemplate后端项目开发模板,发布也有一段时间了。为了补充应用场景,以及详细说明本人总结的一些开发经验,现已常见的《用户/登录权限验证》功能模块来进行详细的讲解。我会以为开发此模拟的实现路径为主线进行说明,希望能帮助到某些开发朋友。
sam dragon
2020/06/29
5030
ApiTemplate:.net后端项目模板完善与总结
.NET周报【1月第3期 2023-01-20】
https://www.cnblogs.com/InCerry/p/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04.html
InCerry
2023/03/08
4.8K0
.NET周报【1月第3期 2023-01-20】
使用.NET Core+Docker 开发微服务
.NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜,目标是开发一个微服务,然后部署到Docker swarm集群,供其他应用调用。
JadePeng
2018/09/27
3.2K0
使用.NET Core+Docker 开发微服务
【周一通勤电台 · 特辑】六千字漫谈2022后端框架流行趋势
这篇文章基于我对后端框架的了解以及研究,提供了2021-2022年度以及未来一年内可能流行的后台框架。
翊君
2022/03/15
4.4K0
【周一通勤电台 · 特辑】六千字漫谈2022后端框架流行趋势
Meteor React Native 项目模板更新啦!
之前Spencer Carli曾发布了Meteor+React Native的项目模板,这个模板发布已经有3个多月了,并且有一些过时。作者最近重新构思了这个模板,让它更适合实际的项目而不仅仅是一个De
时见疏星
2018/06/01
9040
.NET周报 【6月第4期 2023-06-25】
https://www.cnblogs.com/eventhorizon/p/17497359.html
InCerry
2023/08/31
2980
.NET周报 【6月第4期 2023-06-25】
《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
步骤1:在Visual Studio 2019中创建新的asp.net Core项目
角落的白板报
2019/05/05
3.9K0
《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
《从零开始学ASP.NET CORE MVC》:VS2017创建ASP.NET Core Web程序(三)
步骤1:在Visual Studio 2017中创建新的asp.net Core项目
角落的白板报
2019/05/05
2.8K0
《从零开始学ASP.NET CORE MVC》:VS2017创建ASP.NET Core Web程序(三)

相似问题

DateTime与时间戳的比较

12

比较DateTime unix时间戳

10

无法将datetime.datetime与int进行比较;将datetime与unix时间戳进行比较

10

.Net DateTime.Now与PostgreSQL时间戳比较

319

MySQL:比较datetime和时间戳

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文