python vaild parentheses
时间: 2023-11-07 09:05:14 浏览: 48
Python中判断有效括号的方法有多种,其中一种常见的方法是使用栈来实现。
可以定义一个空栈来存储左括号,然后遍历字符串的每个字符。当遇到左括号时,将其入栈;当遇到右括号时,检查栈顶元素是否与当前右括号匹配,如果匹配则将栈顶元素出栈,否则返回False。最后,检查栈是否为空,如果为空则返回True,否则返回False。
以下是一个示例的Python代码实现:
```python
class Solution:
def isValid(self, s):
stack = [] # 创建一个空栈
mapping = {')': '(', ']': '[', '}': '{'} # 定义括号的对应关系
for char in s:
if char in '([{': # 如果是左括号,则入栈
stack.append(char)
else: # 如果是右括号
if not stack or mapping[char] != stack.pop(): # 如果栈为空或括号不匹配,则返回False
return False
return not stack # 如果栈为空,则返回True;否则返回False
```
相关问题
fgets stream vaild
在C语言中,fgets函数用于从指定的输入流中读取一行文本,并将其存储到一个字符数组中。为了确保fgets函数操作有效,你需要确保以下几点:
1. 检查文件指针是否有效:如果你要从文件中读取数据,确保文件指针指向已经成功打开的文件。常见的文件指针是通过fopen函数返回的。
2. 检查字符数组是否足够大:fgets函数将读取的文本存储在一个字符数组中,因此确保字符数组足够大以容纳读取的文本。你可以使用sizeof操作符来获取字符数组的大小。
3. 检查输入流是否有效:fgets函数需要指定一个有效的输入流作为参数。常见的输入流包括标准输入(stdin)和打开的文件。
下面是一个示例代码,演示了如何使用fgets函数从标准输入读取一行文本:
```c
#include <stdio.h>
int main() {
char input[100];
printf("请输入一行文本:\n");
if (fgets(input, sizeof(input), stdin) != NULL) {
printf("你输入的文本是:%s\n", input);
} else {
printf("读取文本失败!\n");
}
return 0;
}
```
这段代码中,我们定义了一个长度为100的字符数组`input`来存储输入的文本。然后使用fgets函数从标准输入中读取一行文本,并将其存储到`input`数组中。如果读取成功,就输出输入的文本,否则输出提示信息。
service层vaild
在原来的项目中,@Valid和@Validated注解通常被用于controller层对requestBody参数进行校验。但是现在项目决定将controller层变薄,将requestBody的校验移至service层。然而,发现在service层的单元测试中,这两个注解并没有生效。为了解决这个问题,可以按照以下步骤进行操作:
1. 首先,在service类上添加@Validated注解,例如:
```
@Service
@Validated
public class StorageBinServiceImpl implements StorageBinService {
// ...
}
```
2. 然后,在单元测试类中添加@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(classes = {UserServiceTest.Config.class})注解,例如:
```
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {UserServiceTest.Config.class})
public class UserServiceTest {
// ...
}
```
3. 接着,在单元测试类中创建一个内部静态类Config,用于配置MethodValidationPostProcessor,并且在该类中注入service bean,例如:
```
public static class Config {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
@Bean
public UserService userService() {
return new UserService();
}
}
```
4. 最后,在单元测试方法上使用@Test注解,并调用service的方法进行测试,例如:
```
@Autowired
private UserService service;
@Test
public void should_throw_exception_when_age_smaller_than_zero() {
CreateUserCommand command = new CreateUserCommand("deigo", -1);
try {
service.save(command);
} catch (ConstraintViolationException e) {
System.out.println(e.getConstraintViolations().size());
// 输出结果应为1
}
}
```
通过以上步骤,可以在service层的单元测试中使@Validated注解生效,实现对requestBody参数的校验。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [解决 @Validate 在 Service 层的单元测试不生效](https://blog.csdn.net/yy_diego/article/details/116611840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [JAVA参数分组验证Validation及service层触发校验规则](https://blog.csdn.net/Seven71111/article/details/112175646)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]