在日常写Java的时候,对于字符串的操作是非常普遍的,其中最常见的就是对字符串的组织。也因为这个操作非常普遍,所以诞生了很多方案,总下来大概有这么几种: 使用+拼接 使用StringBuffer和SpringBuilder String::formatandString::formatted 使用java.text.MessageFormat 下面,我们一起来学习一下Java21中的新方案!如果您对于上面这些还不熟悉的话,建议可以先看一下这篇《Java自带的4种字符串组织和格式化方法》,了解以前的机制,这样与最新的处理方案做对比,理解会更深刻。 模版表达式 在Java21中处理字符串的新方...

  lnZqfDbuKjjk   2023年11月01日   52   0   0 Java

相信很多后端开发。对于前端知识是比较零碎的,所以很多时候写表单这样的工作,一般就是复制黏贴,然后改改字段。对于HTML格式,一直觉得比较杂乱,不够简洁。 最近TJ发现了一个有趣的小工具:CreateHTMLForm。 看看上面它的Slogan,是不是很有意思?居然可以通过Markdown来编写HTML的表单?下面就来一起看看这款工具的能力。 下面是官方页面给出的Markdown案例: ExampleForm name=___ Email=___[@]EnterEmail Password=___[] city={Boston,SFO->SanFrancisco,(NYC->N...

  lnZqfDbuKjjk   2023年11月01日   67   0   0 Java

大家好,我是TJ 今天给大家推荐一个开源协作式数字白板:tldraw。 tldraw的编辑器、用户界面和其他底层库都是开源的,你可以在它的开源仓库中找到它们。它们也在NPM上分发,提供开发者使用。您可以使用tlDraw为您的产品创建一个临时白板,或者将其作为构建自己应用的工具来使用。 在线体验 tldraw的官方网站就是一个在线体验的demo,大家可以通过https://www.tldraw.com/直接访问进入体验。 可以看到界面非常的简洁,速度也非常快。 开发整合 如果你要把tldraw引入自己的应用中,非常简单,只需要通过类似下面的方法使用即可: import{Tldraw}from...

  lnZqfDbuKjjk   2023年11月01日   33   0   0 Java

Notion相信大家都不陌生了,一款非常好用的笔记软件,TJ君也一直在用来记笔记和写文章。关于Notion的替代品,之前有给大家推荐AFFiNE,但这个还是一个比较成型的软件。 那么如果想开发一个类Notion的工具,又或者在自己的应用中增加一个类Notion的内容编辑功能,是否有好用的开源工具呢? 今天,TJ君就给大家推荐一个不错的开源仿Notion编辑器:Novel 安装使用 Novel的安装和使用非常简单,只需要两步: 安装依赖 npminovel 引入novel的Editor,把编辑器加到你的应用中: import{Editor}from"novel"; exportde...

  lnZqfDbuKjjk   2023年11月01日   43   0   0 Java

早上看到一篇关于SpringBoot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,我就不翻译了,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。 测试场景 作者采用了一个尽可能贴近现实操作的场景: 从授权头信息中提取JWT 验证JWT并从中提取用户的Email 使用用户的Email去MySQL里执行查询 返回用户记录 测试技术 这里要对比的两个核心技术点是: 带有虚拟线程的SpringBoot:这不是一个跑在传统物理线程上的SpringBoot应用,而是跑在虚拟线程上的。这些轻量级线程简化了开发、维护和调试高吞吐量并发应用程序的复杂任务。虽然虚拟线程仍然在底层操...

  lnZqfDbuKjjk   2023年11月01日   60   0   0 Java

在之前的Java17新特性中,我们介绍过关于JEP406:switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在JDK18、JDK19、JDK20中又都进行了更新和完善。如今,在JDK21中,该特性得到了最终确定!下面,我们就再正式学习一下该功能! 在以往的switch语句中,对于case中的类型匹配限制是很多的。比如下面这个例子中的Map中可能存储了不同类型的对象,我们要判断的时候,就只能依靠if-else来完成。 Map<String,Object>data=newHashMap<>(); data.put("key1","aaa"); data.pu...

  lnZqfDbuKjjk   2023年11月01日   72   0   0 Java

RecordPatterns第一次发布预览是在JDK19、随后又在JDK20中进行了完善。现在,Java21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。 recordPoint(intx,inty){} staticvoidprintSum(Objectobj){ if(objinstanceofPointp){ intx=p.x(); inty=p.y(); System.out.println(x+y); } } 上述代码中定义了一个名为Point的record类(Java16中的新特性),如果我们想要获取、操作或者打印Point中的x和y的话。就不得不先完成类型判断...

  lnZqfDbuKjjk   2023年11月01日   46   0   0 Java

发现Java21的StringBuilder和StringBuffer中多了repeat方法: / @throwsIllegalArgumentException{@inheritDoc} @since21 / @Override publicStringBuilderrepeat(intcodePoint,intcount){ super.repeat(codePoint,count); returnthis; } / @throwsIllegalArgumentException{@inheritDoc} @since21 / @Override publicStringBuilde...

  lnZqfDbuKjjk   2023年11月01日   23   0   0 Java

大家好,我是TJ君! 如今在国内运营的各种互联网应用都有接入IP来源显示的要求,现在相关API的供应商也很多。今天TJ刚好看到一个不错的,所以马上给大家推荐一下。 这款不错的产品名称为:IPInfo 产品特性 该IP查询工具除了传统的提供地址位置之外,还有很多其他能力,具体的这里TJ君给大家整理了一下,主要下面有这些: IP所在现实世界中的地理位置 IP背后的公司信息,包括:公司名称、域名、公司类型等 查找公司拥有或运营的IP范围 检测隐藏用户IP的VPN、代理等 IP与每个ASN相关域的详细信息 IP地址上托管的域列表 IPWhois信息查询 检测移动运营商的信息 IP滥用信息 API...

  lnZqfDbuKjjk   2023年11月01日   49   0   0 Java

在JDK21中,SequencedCollections的引入带来了新的接口和方法来简化集合处理。此增强功能旨在解决访问Java中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景。 下面一起通过本文来了解一下不同集合处理示例。 SequencedCollections接口 SequencedCollections引入了三个新接口: SequencedCollection SequencedMap SequencedSet 这些接口附带了一些新方法,以提供改进的集合访问和操作功能。 第一个和最后一个元素的访问 在JDK21之前,检索Java中集合的第一个和最后一个元素涉及不同的方法...

  lnZqfDbuKjjk   2023年11月01日   34   0   0 Java

不知道大家平时开发响应式前端代码是如何调试的?是不是也跟我一样,通过浏览器的开发者工具来切换不同的界面尺寸来看验证效果呢? 可能是因为习惯了,平时就不停的切换不同尺寸来看效果。直到TJ君看到今天要推荐的这个免费工具,我才发现之前的调试方式好傻... 使用体验 下面,我们还一起来看看今天要推荐的这款名为:Responsively的免费工具。 它可以帮助我们更便捷的调试响应式界面的程序,如何便捷呢? 直接看下图: 这款工具通过将不同尺寸的界面一起显示的方式,让我们一次就能看到多个场景下的效果,是不是直观方便很多呢? 它还有很多有用的功能,比如: 元素审查: 日夜模式: 支持平台 Respo...

  lnZqfDbuKjjk   2023年11月01日   29   0   0 Java

在Java21中,引入了虚拟线程(VirtualThreads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。 虚拟线程,也称为“用户模式线程(user-modethreads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它们可以比传统线程创建更多数量,并且开销要少得多。这使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中也是如此。 创建和使用虚拟线程 在Java21中创建和使用虚拟线程有多种方法: 1.使用静态构建器方法 Thread.startVirtualThread方法将可运行对象作为参...

  lnZqfDbuKjjk   2023年11月01日   40   0   0 Java

Java21引入了两个语言核心功能: 未命名的Java类你说 新的启动协议:该协议允许更简单地运行Java类,并且无需太多样板 下面一起来看个例子。通常,我们初学Java的时候,都会写类似下面这样的HelloWorld程序: publicclassHelloWorld{ publicstaticvoidmain(String[]args){ System.out.println("Hello,World!"); } } 对于程序的功能来说,这里有太多的混乱的代码、太多的概念、太多的构造。 ThestaticmodifierispartofJava'sclass-and-objectm...

  lnZqfDbuKjjk   2023年11月01日   16   0   0 Java

Java21中除了推出JEP445:UnnamedClassesandInstanceMainMethods之外,还有另外一个预览功能:未命名模式和变量(UnnamedPatternsandVariables)。该新特性的目的是提高代码的可读性和可维护性。 下面通过一个例子来理解这个功能,try-catch块相信大家都不陌生,都是这样写的: try{ }catch(Exceptione){ System.out.println("Anerrorhasoccurred!"); } 这里的参数e就是一个未使用的变量。 那么在Java21中推出JEP443特性之后,就可以这样写了: try{ ...

  lnZqfDbuKjjk   2023年11月01日   68   0   0 Java

Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中,已经有所介绍。 今天通过这篇,我们来了解一下Redis最常见的5种应用场景。您可以通过视频来学习,如果您不方便观看视频,也可以通过文字内容学习,文字部分做了更概要的总结。 缓存(Cache) Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。 在该场景下,有一些存储于数据库中的数据会被频繁访问,如果频繁的访问数据库,数据库负载会升高,同时由于数据库IO比较慢,应用程序的响...

  lnZqfDbuKjjk   2023年11月01日   19   0   0 Java

在每个Java新版本发布的特性中,都会包含一些Preview(预览)功能,这些功能主要用来给开发者体验并收集建议。所以,Preview阶段的功能并不是默认开启的。 如果想体验某个Java版本中的Preview功能,您还需要做一些设置才能把程序跑起来。 下面以IDEA2023.2为例,演示为Java21开启Preview功能。 第一步:打开setting配置编译参数,按如下图所示:选择Java版本以及增加开启preview的配置参数--enable-preview 第二步:配置Run/Debug参数,VM参数中增加--enable-preview 再执行相关测试代码的时候,就可以看到已经包含...

  lnZqfDbuKjjk   2023年11月01日   19   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~